如何将一维ndarray的列表转换为二维ndarray(mxnet ndarray)

时间:2018-09-01 03:19:01

标签: python numpy mxnet numpy-ndarray

在此示例中,我有一个1-d ndarray列表,其长度为9,该列表包含9个元素,每个元素都有shape=(2048,),所以总的9 * (2048,),我得到了这些{{ 1}}来自ndarray,因此每个mxnetndarray数组<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)的二维数组,如何解决这个问题?

ps:我通过保存一个shape=(9, 2048)文件并加载来发现此问题。在将列表转换为npy之前,我直接保存了该列表(因此ndarray会将列表自动转换为np.save),加载后,我发现形状已经变成上面的形状,这真的很异常

下面的答案ndarrarynp.vstack都适用于常见的np.arraylist问题,但无法解决我的问题,因此我怀疑这是某些问题ndarray

的特例

2 个答案:

答案 0 :(得分:2)

您可以使用np.vstack。这是一个示例:

import numpy as np

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

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

答案 1 :(得分: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()在上述示例中对{{1}做相同的操作}