如图所示将列表转换为numpy数组的最直接方法是什么?
我尝试进行numpy.asarray()
的操作,但结果是3轴,尽管合并了值,但结果数组中的数据已转置。
已更新:
因此asarray().reshape(1,3)
适用于单行。但是我列表中的元素大小为(2,1)或更大,看来重塑不能正确地进行调换。我该怎么办?
已更新:
设法做到以下两个步骤:reshape(3,2)
然后np.transpose()
。我想知道是否有一个单一步骤的方法?
答案 0 :(得分:1)
您列出的所有维度都有两个。看来您要flatten:
>>> x=[[1]]
>>> y=[[2]]
>>> z=[[3]]
>>> np.array((x,y,z)).flatten()
array([1, 2, 3])
如果需要3列和1行,则可以专门调整形状:
>>> np.array((x,y,z)).reshape(1,3)
array([[1, 2, 3]])
请注意,这是二维的。平面阵列是一维的,因此没有行列的感觉-您可以reshape(3,1)
来查看与3x1阵列的区别。
要回答您的修改,我认为没有其他方法可以比
>>> x=[[1],[2]]
>>> y=[[3],[4]]
>>> z=[[5],[6]]
>>> np.array((x,y,z)).reshape(3,2).T
array([[1, 3, 5],
[2, 4, 6]])
,它也是最佳的。使用.T
将为您节省对np.transpose
的显式调用。
答案 1 :(得分:0)
如果需要二维(行或列)数组,可以将np.atleast_2d
与np.flatten
结合使用,如上所示:
x = np.arange(10).reshape((2,5))
print(x)
>>array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
x_new = np.atleast_2d(x.flatten())
print(x_new)
>> array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
x_new = np.atleast_2d(x.flatten()).T
print(x_new)
>> array([[0],
[1],
[2],
[3],
[4],
[5],
[6],
[7],
[8],
[9]])
答案 2 :(得分:0)
案例A:将三个(1, 1)
形状的数组的列表合并为(1, 3)
形状的数组
情况B:将三个(2, 1)
形状的数组的列表合并为(2, 3)
形状的数组
约束:只需一步即可完成。 (大概,一个“步骤”就是一个函数调用。)
一般答案:将它们串联起来!函数numpy.concatenate()
获取一个数组列表,并将它们沿着任意轴粘贴在一起。唯一的限制是,数组的形状在所有其他维度上都必须相同。
以下示例显示如何将N
形状为(K, 1)
的数组列表组合为形状为(K, N)
的数组。
import numpy as np
list_of_arrays = [np.array([[1], [2]]), np.array([[10], [20]]), np.array([[100], [200]])]
assert list_of_arrays[0].shape == (2, 1)
assert list_of_arrays[1].shape == (2, 1)
assert list_of_arrays[2].shape == (2, 1)
result = np.concatenate(list_of_arrays, axis=1) # single step: list -> array
assert result.shape == (2, 3)