如何将1-D nararray列表转换为2-D ndarray(mxnet ndarray)

问题描述 投票:2回答:2

在这个例子中,我有一个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.vstacknp.array都适用于常见的listndarray问题,但无法解决我的问题,所以我怀疑它是mxnet的一些特殊情况

python numpy mxnet numpy-ndarray
2个回答
2
投票

你可以使用np.vstack。这是一个例子:

import numpy as np

li = [np.zeros(2048) for _ in range(9)]
result = np.vstack(li)
print(result.shape)

这会根据需要输出(9, 2048)


0
投票

由于给出正确答案作为评论的人解决了我的问题,但没有发表答案,我会在这里为其他可能遇到这个问题的人发布他的答案

事实上,np.arraymxnet.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()做了同样的事情

© www.soinside.com 2019 - 2024. All rights reserved.