呼如林
我发现这可以按照您希望的方式工作,只需通过矩阵一次,无需使用任何库。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(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件事:通过使用步长值为 2 使 w 跳过奇数添加了额外的一行,其中奇数索引元素获取 y 的值最后将 h 的值加倍,以便每个替代元素都获得一个新值
忽然笑
当您要求“无库”解决方案时,我非常建议numpy用于与矩阵操作相关的所有内容,例如整形或转置,您在这里都需要:>>> 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,即一个 3x3 的元组矩阵......然后transpose,您交换第一个 (0) 和第二个 (1) 轴并保持第三个 (2) 到位...最后矩阵再次变平 ravel如果您最终不能使用 numpy,您仍然可以使用它来正确转置索引矩阵以确定哪个元素必须去哪里,然后通过列表循环重现它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]当然,你也可以用常规循环代替列表推导式和其他语言来做同样的事情。基本上,添加索引的三个术语中的每一个都对应于矩阵的一个维度,老实说,我通过猜测而不是真正理解正在发生的事情来解决这个问题。不用说,numpy-solution 更干净。