将numpy数组列表转换为单个numpy数组的最直接方法是什么?

时间:2018-12-18 07:34:47

标签: python numpy

enter image description here

如图所示将列表转换为numpy数组的最直接方法是什么?

我尝试进行numpy.asarray()的操作,但结果是3轴,尽管合并了值,但结果数组中的数据已转置。

已更新:

因此asarray().reshape(1,3)适用于单行。但是我列表中的元素大小为(2,1)或更大,看来重塑不能正确地进行调换。我该怎么办?

enter image description here

已更新:

设法做到以下两个步骤:reshape(3,2)然后np.transpose()。我想知道是否有一个单一步骤的方法?

3 个答案:

答案 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_2dnp.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)