在此示例中,我有一个1-d ndarray列表,其长度为9,该列表包含9个元素,每个元素都有shape=(2048,)
,所以总的9 * (2048,)
,我得到了这些{{ 1}}来自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)
的二维数组,如何解决这个问题?
ps:我通过保存一个shape=(9, 2048)
文件并加载来发现此问题。在将列表转换为npy
之前,我直接保存了该列表(因此ndarray
会将列表自动转换为np.save
),加载后,我发现形状已经变成上面的形状,这真的很异常
下面的答案ndarrary
和np.vstack
都适用于常见的np.array
至list
问题,但无法解决我的问题,因此我怀疑这是某些问题ndarray
答案 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.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()
在上述示例中对{{1}做相同的操作}