在这个例子中,我有一个1-d nararray的列表,长度为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)
。
由于给出正确答案作为评论的人解决了我的问题,但没有发表答案,我会在这里为其他可能遇到这个问题的人发布他的答案
事实上,np.array
和mxnet.ndarray
并不完全相同,因此直接在numpy
上调用mxnet.ndarray
方法是危险的。要在numpy
中使用mxnet.ndarray
方法,我们首先应该将数组转换为np.array
,这是
mx_ndarray = mxnet.ndarray.zeros(5)
np_array = mx_ndarray.asnumpy()
然后numpy
方法可以用于np_array
由于上面的答案更为通用(np.vstack()
),我接受它并将此答案作为参考发布,同样,np.array()
在上面的例子中用np.vstack()
做了同样的事情