【问题标题】:How do I convert an array of arrays into a multi-dimensional array in Python?如何在 Python 中将数组数组转换为多维数组?
【发布时间】:2018-01-03 19:38:23
【问题描述】:

我有一个由数组组成的 NumPy 数组(长度为 X),所有这些数组的长度(Y)都相同,但其类型为“object”,因此具有维度(X,)。我想将其“转换”为具有成员数组元素类型(“float”)的维度(X,Y)数组。

我能看到的唯一方法是“手动”使用类似的东西

[x for x in my_array]

有没有更好的成语来完成这种“转换”?


例如我有类似的东西:

array([array([ 0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.]),
       array([ 0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.]),
       array([ 0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.]), ...,
       array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.]),
       array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.]),
       array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.])], dtype=object)

其中有 shape (X,) 而不是 (X, 10)。

【问题讨论】:

  • 你最初是如何得到这个数组的?这种事情通常意味着你在程序的早期做错了什么。我怀疑子数组的长度并不相同。
  • np.transpose(your_array).astype(float)
  • @Mr_U4913: "ValueError: setting an array element with a sequence"
  • @user2357112:子数组确实具有相同的长度。 @user2357112:我从two lists of X arrays 的列表开始,其中一个列表中的所有数组的长度为 Y,然后我将其转置(出于多种原因)并用例如[:,1] 对其进行切片,这会产生问题结构。
  • @raxacoricofallapatorius:听起来你肯定做错了什么。也许在转置中。

标签: python arrays numpy data-conversion


【解决方案1】:

您可以在新轴上连接数组。例如:

In [1]: a=np.array([1,2,3],dtype=object)
   ...: b=np.array([4,5,6],dtype=object)

要创建一个数组数组,我们不能像删除的答案那样将它们与array 组合起来:

In [2]: l=np.array([a,b])
In [3]: l
Out[3]: 
array([[1, 2, 3],
       [4, 5, 6]], dtype=object)
In [4]: l.shape
Out[4]: (2, 3)

相反,我们必须创建一个正确形状的空数组,并填充它:

In [5]: arr = np.empty((2,), object)
In [6]: arr[:]=[a,b]
In [7]: arr
Out[7]: array([array([1, 2, 3], dtype=object), 
               array([4, 5, 6], dtype=object)], 
              dtype=object)

np.stack 作用类似于np.array,但使用concatenate

In [8]: np.stack(arr)
Out[8]: 
array([[1, 2, 3],
       [4, 5, 6]], dtype=object)
In [9]: _.astype(float)
Out[9]: 
array([[ 1.,  2.,  3.],
       [ 4.,  5.,  6.]])

我们还可以使用concatenatehstackvstack 来组合不同轴上的数组。它们都将数组数组视为数组列表。

如果 arr 是 2d(或更高),我们必须先 ravel

【讨论】:

    猜你喜欢
    • 2020-11-19
    • 2019-07-09
    • 2011-08-24
    • 2019-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-10
    相关资源
    最近更新 更多