如何在Python中将数组数组转换为多维数组?

时间:2017-07-27 21:46:29

标签: python arrays numpy data-conversion

我有一个NumPy数组(长度为X)的数组,所有数组都具有相同的长度(Y),但其类型为#34; object"因此具有尺寸(X,)。我想"转换"这将成为一个维度(X,Y)数组,其中包含成员数组的元素类型(" float")。

我能看到的唯一方法就是"手动"像

这样的东西
[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)。

1 个答案:

答案 0 :(得分:2)

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

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