第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

轉(zhuǎn)置 x,y 對(duì)的扁平矩陣

轉(zhuǎn)置 x,y 對(duì)的扁平矩陣

一只萌萌小番薯 2021-09-11 10:10:34
我得到了一個(gè)代表 x 和 y 值的十進(jìn)制數(shù)的一維數(shù)組。我需要轉(zhuǎn)置給定的一維數(shù)組,就好像它是一個(gè)矩陣一樣。我當(dāng)前的代碼是這樣做的,但不完全是我想要的:to_transpose = [0.914, 0.639, 0.058, 0.760, 0.926, 0.475,                0.255, 0.671, 0.195, 0.966, 0.336, 0.841,                0.279, 0.341, 0.591, 0.638, 0.520, 0.225]matrix_width = 6matrix_height = 3# INITIALIZE AN EMPTY LISTtransposed_list = [None] * matrix_width * matrix_heightfor w in range(matrix_width):    for h in range(matrix_height):        transposed_list[w * matrix_height + h] = to_transpose[h * matrix_width + w]這段代碼正確地轉(zhuǎn)置了矩陣,但不是我想要的格式。由于這是一個(gè) x、y 值的數(shù)組,所需的輸出如下所示:correct_output=[0.914, 0.639, 0.255, 0.671, 0.279, 0.341,                0.058, 0.760, 0.195, 0.966, 0.591, 0.638,                0.926, 0.475, 0.336, 0.841, 0.520, 0.225]在正確的輸出中,每 2 位小數(shù)在轉(zhuǎn)置中被視為 1。我想知道這是否可以在不使用外部庫(kù)的情況下通過(guò)矩陣一次,如上例所示?我希望它適用于方陣和非方陣。
查看完整描述

3 回答

?
呼如林

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超3個(gè)贊

我發(fā)現(xiàn)這可以按照您希望的方式工作,只需通過(guò)矩陣一次,無(wú)需使用任何庫(kù)。


to_transpose = [0.914, 0.639, 0.058, 0.760, 0.926, 0.475,

                0.255, 0.671, 0.195, 0.966, 0.336, 0.841,

                0.279, 0.341, 0.591, 0.638, 0.520, 0.225]

matrix_width = 6

matrix_height = 3

# INITIALIZE AN EMPTY LIST

transposed_list = [None] * matrix_width * matrix_height


for w in range(0, matrix_width, 2):

    for h in range(matrix_height):

        transposed_list[w * matrix_height + (2 * h)] = to_transpose[h * matrix_width + w]

        transposed_list[(w * matrix_height + (2 * h)) + 1] = to_transpose[(h * matrix_width + w) + 1]

print(transposed_list)

我做了3件事:


通過(guò)使用步長(zhǎng)值為 2 使 w 跳過(guò)奇數(shù)

添加了額外的一行,其中奇數(shù)索引元素獲取 y 的值

最后將 h 的值加倍,以便每個(gè)替代元素都獲得一個(gè)新值


查看完整回答
反對(duì) 回復(fù) 2021-09-11
?
忽然笑

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超5個(gè)贊

當(dāng)您要求“無(wú)庫(kù)”解決方案時(shí),我非常建議numpy用于與矩陣操作相關(guān)的所有內(nèi)容,例如整形或轉(zhuǎn)置,您在這里都需要:


>>> import numpy as np

>>> to_transpose = [0.914, 0.639, 0.058, 0.760, 0.926, 0.475,

                    0.255, 0.671, 0.195, 0.966, 0.336, 0.841,

                    0.279, 0.341, 0.591, 0.638, 0.520, 0.225]


>>> np.array(to_transpose).reshape((3,3,2)).transpose(1,0,2).ravel()

array([ 0.914,  0.639,  0.255,  0.671,  0.279,  0.341,

        0.058,  0.76 ,  0.195,  0.966,  0.591,  0.638,

        0.926,  0.475,  0.336,  0.841,  0.52 ,  0.225])

稍微分解一下:


np.array將您的清單變成array...

然后你reshape去3x3x2,即一個(gè) 3x3 的元組矩陣......

然后transpose,您交換第一個(gè) (0) 和第二個(gè) (1) 軸并保持第三個(gè) (2) 到位...

最后矩陣再次變平 ravel

如果您最終不能使用 numpy,您仍然可以使用它來(lái)正確轉(zhuǎn)置索引矩陣以確定哪個(gè)元素必須去哪里,然后通過(guò)列表循環(huán)重現(xiàn)它to_transpose:


>>> list(np.array(list(range(w*h))).reshape((3,3,2)).transpose(1,0,2).ravel())

[0, 1, 6, 7, 12, 13, 2, 3, 8, 9, 14, 15, 4, 5, 10, 11, 16, 17]


>>> [i%2 + (i//2 * w % (w*h)) + 2 * (i//(h*2)) for i in range(w*h)]

[0, 1, 6, 7, 12, 13, 2, 3, 8, 9, 14, 15, 4, 5, 10, 11, 16, 17]


>>> [to_transpose[i%2 + (i//2 * w % (w*h)) + 2 * (i//(h*2))] for i in range(w*h)]

[0.914, 0.639, 0.255, 0.671, 0.279, 0.341,

 0.058, 0.76, 0.195, 0.966, 0.591, 0.638,

 0.926, 0.475, 0.336, 0.841, 0.52, 0.225]

當(dāng)然,你也可以用常規(guī)循環(huán)代替列表推導(dǎo)式和其他語(yǔ)言來(lái)做同樣的事情。基本上,添加索引的三個(gè)術(shù)語(yǔ)中的每一個(gè)都對(duì)應(yīng)于矩陣的一個(gè)維度,老實(shí)說(shuō),我通過(guò)猜測(cè)而不是真正理解正在發(fā)生的事情來(lái)解決這個(gè)問(wèn)題。不用說(shuō),numpy-solution 更干凈。


查看完整回答
反對(duì) 回復(fù) 2021-09-11
  • 3 回答
  • 0 關(guān)注
  • 232 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)