Numpy 将矩阵附加到张量

Posted

技术标签:

【中文标题】Numpy 将矩阵附加到张量【英文标题】:Numpy Append Matrix to Tensor 【发布时间】:2018-06-13 21:54:41 【问题描述】:

我正在尝试使用 numpy 构建矩阵列表,但是当我尝试将矩阵附加到空张量时,出现错误:

ValueError:所有输入数组的维数必须相同

连接和追加似乎都失败了。我试着打电话:

tensor = np.concatenate((tensor, matrix), axis=0)

tensor = np.append(tensor, matrix, axis=0)

但无论哪种方式,我都会遇到相同的错误。

张量以 [0, h, w] 的大小开始,矩阵的大小为 [h, w]。矩阵在我想要附加的方向上是正确的形状,但它似乎不会附加。

【问题讨论】:

tensor[0] = matrix? 最初,张量[0] 为空且越界。添加矩阵后 - 是的。 当有人创建一个形状为 0 的数组时,我觉得哦,哦。他们正在通过重复追加以缓慢的方式构建数组。使用列表追加,并且只有一个连接。做对会更快更容易。 什么是列表追加?此外,速度并不是真正的问题(至少在这一点上)。我想我可以通过首先弄清楚我将添加多少个矩阵来让它更快一点,我以后可能会改变它。但即使我的张量也有 n 行,问题仍然存在。 【参考方案1】:

似乎matrix 将代表传入的,而您将它们累积到tensor。所以,要解决它,添加一个以None/np.newaxis 为前导的新轴到matrix,然后与tensor 连接 -

np.concatenate((tensor, matrix[None]),axis=0)

如果您正在累积,请将其存储回tensor

或使用np.vstack((tensor, matrix[None]))

示例运行 -

In [16]: h,w = 3,4
    ...: a = np.random.rand(0,h,w)
    ...: b = np.random.rand(h,w)

In [17]: np.concatenate((a, b[None]),axis=0).shape
Out[17]: (1, 3, 4)

【讨论】:

以上是关于Numpy 将矩阵附加到张量的主要内容,如果未能解决你的问题,请参考以下文章

Numpy:将矩阵与 3d 张量相乘——建议

单独的3D矩阵像numpy

Python Numpy中的几个矩阵乘法

如何从 resnet 层循环遍历 4D(无,x,y,z)激活张量的 2D 矩阵?

用标量角张量创建变换矩阵

混合类型的 NumPy 数组/矩阵