Python重塑列表到ndim数组

时间:2016-02-16 12:16:04

标签: python numpy reshape

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

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

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

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

下面给出了相同顺序的值,但这不正确:

np.shape = (2,4) 

例如

[[0,0,0,0]
 [1,1,1,1]]

4 个答案:

答案 0 :(得分:18)

您可以考虑重新塑造新形状从展平的原始列表/数组中逐行填充(最后一个尺寸变化最快)。

一个简单的解决方案是将列表整形为(100,28)数组,然后转置它:

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

有关更新示例的更新:

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]])

答案 1 :(得分:0)

逐步:

# 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]])

答案 2 :(得分:0)

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

您可以运行一个小循环并将尺寸从1xN更改为Nx1。

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

如果数量很大,可能效率不高。但这适用于一小部分数字。 谢谢

答案 3 :(得分:0)

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

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