具有不同最后轴尺寸元素的Numpy数组



假设代码如下:

import numpy as np
x = np.random.random([2, 4, 50])
y = np.random.random([2, 4, 60])
z = [x, y]
z = np.array(z, dtype=object)

这给出了ValueError: could not broadcast input array from shape (2,4,50) into shape (2,4)

我可以理解为什么会出现这个错误,因为两个数组的最后一个维度是不同的,numpy数组不能存储不同维度的数组。

然而,我碰巧有一个mat文件,当通过scipy中的io.loadmat()函数在Python中加载时,包含具有以下属性的np.ndarray:

from scipy import io
mat = io.loadmat(file_name='gt.mat')
print(mat.shape)
> (1, 250)
print(mat[0].shape, mat[0].dtype)
> (250,) dtype('O')
print(mat[0][0].shape, mat[0][0].dtype)
> (2, 4, 54), dtype('<f8')
print(mat[0][1].shape, mat[0][1].dtype)
> (2, 4, 60), dtype('<f8')

这让我很困惑。数组mat[0]如何在这个文件中持有numpy数组与不同的尾随维度作为对象,而作为np.ndarray本身,我不能这样做吗?

在嵌套数组上调用np.array时,它将尝试堆栈数组。注意,在这两种情况下您都在处理对象。这仍然是可能的。一种方法是首先创建一个空的对象数组,然后填充值。

z = np.empty(2, dtype=object)
z[0] = x
z[1] = y

就像这个答案。

相关内容

  • 没有找到相关文章

最新更新