【发布时间】:2020-03-17 15:51:47
【问题描述】:
我有一个 nD 维度的形状 (2,2,2,...n) 的大矩阵,它经常变化。
但是,我也收到了始终是形状 (2,) 的一维数组的传入数据。
现在我想通过重塑将我以前的 nD 维度矩阵与我的 1D 数组相乘......而且我还有一个“索引”,我想特别广播和修改哪些维度。
因此,我正在执行以下操作(在循环中):
matrix_nd *= array_1d.reshape(1 if i!=index else dimension for i, dimension in enumerate(matrix_nd.shape))
但是,这个生成器作为输入似乎无效。 请注意,维度始终等于 2,并且仅在我们的序列中放置一次。
例如,如果我们有一个形状为 (2,2,2,2,2) 且索引为 3 的 5D 矩阵;我们希望将一维数组重塑为 (1,1,1,2,1)。
有什么想法吗?
提前致谢。
编辑:
所以事实证明我的整个方法都是错误的: 获得我想要的元组似乎仍然将 (2,) 一维数组广播到所有维度。
例如:
我有 (2,2,2) 的 numpy 数组 test_nd.shape,它看起来像这样:
array([[[1, 1],
[1, 1]],
[[1, 1],
[1, 1]]])
然后我重塑一个 (2,) 一维数组,仅广播到第三维:
toBroadcast = numpy.asarray([0,0]).reshape(1,1,2)
toBroadcast 的格式为array([[[0, 0]]])
但是...test_nd*toBroadcast 返回以下结果:
array([[[0, 0],
[0, 0]],
[[0, 0],
[0, 0]]])
它似乎一直在向所有维度广播。有什么想法吗?
【问题讨论】:
-
您需要将
test_nd与一个随机值一起使用,而不是所有 1 以及类似的其他一维数组的随机值,然后向我们展示您的期望。目前还不清楚。
标签: python numpy reshape numpy-ndarray array-broadcasting