如何将一维 ndarray 列表转换为二维 ndarray (mxnet ndarray)
How to transform a list of 1-D ndarray to 2-D ndarray (mxnet ndarray)
在这个例子中,我有一个一维 ndarray 的列表,长度为 9,列表有 9 个元素,每个元素有 shape=(2048,)
,所以总共 9 * (2048,)
,我得到这些ndarray
来自 mxnet
这样每个 ndarray
就是 <NDArray 2048 @cpu(0)>
数组 dtype=numpy.float32
如果我用np.asarray
改造这个列表,就会变成下面的结果
shape=<class 'tuple'>: (9, 2048, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
很明显,我想要一个二维数组,有shape=(9, 2048)
,如何解决这个问题?
ps:我通过保存 npy
文件并加载它发现了这个问题。我在转成ndarray
之前直接保存了列表(所以np.save
会自动把列表转成ndarrary
)加载后发现形状变成了上面的东西, 这真是变态
下面的答案,np.vstack
和np.array
都适用于常见的list
到ndarray
问题,但无法解决我的问题,所以我怀疑这是 mxnet
的一些特例
您可以使用 np.vstack
。这是一个例子:
import numpy as np
li = [np.zeros(2048) for _ in range(9)]
result = np.vstack(li)
print(result.shape)
这会根据需要输出 (9, 2048)
。
由于给出正确答案作为评论的人解决了我的问题但没有 post 答案,我会 post 他的答案在这里供其他可能也遇到此问题的人使用
其实np.array
和mxnet.ndarray
并不完全一样,直接调用mxnet.ndarray
上的numpy
方法是很危险的。要在mxnet.ndarray
中使用numpy
方法,首先要将数组转换为np.array
,即
mx_ndarray = mxnet.ndarray.zeros(5)
np_array = mx_ndarray.asnumpy()
然后 numpy
方法可以用于 np_array
由于上面的答案比较笼统(np.vstack()
),我接受了,只是post这个答案作为参考,另外,np.array()
在上面做了同样的事情np.vstack()
的示例
在这个例子中,我有一个一维 ndarray 的列表,长度为 9,列表有 9 个元素,每个元素有 shape=(2048,)
,所以总共 9 * (2048,)
,我得到这些ndarray
来自 mxnet
这样每个 ndarray
就是 <NDArray 2048 @cpu(0)>
数组 dtype=numpy.float32
如果我用np.asarray
改造这个列表,就会变成下面的结果
shape=<class 'tuple'>: (9, 2048, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
很明显,我想要一个二维数组,有shape=(9, 2048)
,如何解决这个问题?
ps:我通过保存 npy
文件并加载它发现了这个问题。我在转成ndarray
之前直接保存了列表(所以np.save
会自动把列表转成ndarrary
)加载后发现形状变成了上面的东西, 这真是变态
下面的答案,np.vstack
和np.array
都适用于常见的list
到ndarray
问题,但无法解决我的问题,所以我怀疑这是 mxnet
您可以使用 np.vstack
。这是一个例子:
import numpy as np
li = [np.zeros(2048) for _ in range(9)]
result = np.vstack(li)
print(result.shape)
这会根据需要输出 (9, 2048)
。
由于给出正确答案作为评论的人解决了我的问题但没有 post 答案,我会 post 他的答案在这里供其他可能也遇到此问题的人使用
其实np.array
和mxnet.ndarray
并不完全一样,直接调用mxnet.ndarray
上的numpy
方法是很危险的。要在mxnet.ndarray
中使用numpy
方法,首先要将数组转换为np.array
,即
mx_ndarray = mxnet.ndarray.zeros(5)
np_array = mx_ndarray.asnumpy()
然后 numpy
方法可以用于 np_array
由于上面的答案比较笼统(np.vstack()
),我接受了,只是post这个答案作为参考,另外,np.array()
在上面做了同样的事情np.vstack()