在Python中如何将数组的数组转换为多维数组?
How do I convert an array of arrays into a multi-dimensional array in Python?
我有一个由数组组成的 NumPy 数组(长度为 X),所有数组的长度都相同 (Y),但类型为 "object",因此维度为 (X,)。我想 "convert" 把它变成一个维度 (X, Y) 的数组,成员数组的元素类型 ("float").
我能看到的唯一方法是 "manually" 使用类似
的东西
[x for x in my_array]
有没有更好的成语来完成这个"conversion"?
例如我有这样的东西:
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)。
您可以在新轴上连接数组。例如:
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.]])
我们也可以使用concatenate
、hstack
或vstack
来组合不同轴上的数组。他们都把数组的数组当作数组的列表。
如果 arr
是 2d(或更高)我们必须先 ravel
它。
我有一个由数组组成的 NumPy 数组(长度为 X),所有数组的长度都相同 (Y),但类型为 "object",因此维度为 (X,)。我想 "convert" 把它变成一个维度 (X, Y) 的数组,成员数组的元素类型 ("float").
我能看到的唯一方法是 "manually" 使用类似
的东西[x for x in my_array]
有没有更好的成语来完成这个"conversion"?
例如我有这样的东西:
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)。
您可以在新轴上连接数组。例如:
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.]])
我们也可以使用concatenate
、hstack
或vstack
来组合不同轴上的数组。他们都把数组的数组当作数组的列表。
如果 arr
是 2d(或更高)我们必须先 ravel
它。