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è)新值

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 更干凈。
添加回答
舉報(bào)