Python 将列表重塑为 ndim 数组

Python reshape list to ndim array

你好,我有一个长度为 2800 的平面列表,它包含 28 个变量中的每一个的 100 个结果:下面是 2 个变量的 4 个结果的示例

[0,
 0,
 1,
 1,
 2,
 2,
 3,
 3]

我想将列表重塑为数组 (2,4),以便每个变量的结果都在一个元素中。

[[0,1,2,3],
 [0,1,2,3]]

你可以考虑reshape从原来的展平list/array.

逐行填充新的形状(最后一个维度变化最快)

如果您想按列填充数组,一个简单的解决方案是将列表整形为维度相反的数组,然后转置它:

x = np.reshape(list_data, (100, 28)).T

以上代码片段生成一个 28x100 数组,按列填充。

为了说明,这里有两个将列表整形为 2x4 数组的选项:

np.reshape([0, 0, 1, 1, 2, 2, 3, 3], (4, 2)).T
# array([[0, 1, 2, 3],
#        [0, 1, 2, 3]])

np.reshape([0, 0, 1, 1, 2, 2, 3, 3], (2, 4))
# array([[0, 0, 1, 1],
#        [2, 2, 3, 3]])

一步一步:

# import numpy library
import numpy as np
# create list
my_list = [0,0,1,1,2,2,3,3]
# convert list to numpy array
np_array=np.asarray(my_list)
# reshape array into 4 rows x 2 columns, and transpose the result
reshaped_array = np_array.reshape(4, 2).T 

#check the result
reshaped_array
array([[0, 1, 2, 3],
       [0, 1, 2, 3]])

上面的回答很好。添加一个我用过的案例。 只是如果您不想使用 numpy 并在不更改内容的情况下将其保留为列表。

You can run a small loop and change the dimension from 1xN to Nx1.

    tmp=[]
    for b in bus:
        tmp.append([b])
    bus=tmp

在数字很大的情况下可能效率不高。但它适用于一小部分数字。 谢谢

您可以使用 order 参数指定轴的解释顺序:

np.reshape(arr, (2, -1), order='F')