我有一个大矩阵的形状(2,2,2,…n)的钕维,这往往是不同的。你知道吗
不过,我也收到了传入的数据,这总是一个1D数组的形状(2,)。你知道吗
现在我想用我的一维数组乘以我以前的一维矩阵,通过重塑。。。我还有一个“索引”,我特别想广播和修改它的维度。你知道吗
因此,我将执行以下操作(在循环中):
matrix_nd *= array_1d.reshape(1 if i!=index else dimension for i, dimension in enumerate(matrix_nd.shape))
但是,这个生成器作为输入似乎无效。 请注意,维度将始终等于2,并且在我们的序列中只放置一次。你知道吗
例如,如果我们有一个5D矩阵的形状(2,2,2,2,2),索引为3,我们会想重塑1D数组的形状(1,1,1,2,1)。你知道吗
有什么想法吗?你知道吗
提前谢谢。你知道吗
编辑:
所以我的整个方法都是错的: 得到我想要的元组似乎仍然将(2,)1D数组传播到所有维度。你知道吗
例如:
(2,2,2)的numpy数组test_nd.shape
,如下所示:
array([[[1, 1],
[1, 1]],
[[1, 1],
[1, 1]]])
然后我重塑一个(2,)1D数组,只广播到第三维度:
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]]])
它似乎一直在向全方位传播。有什么想法吗?你知道吗
一种方法是排列轴。因此,我们可以将相关轴从
matrix_nd
推到最后,让它与1D数组相乘,最后将轴置换回来。因此,对于给定的axis
,在matrix_nd
中,我们需要将1D数组相乘,它将是-同样,我们不需要将1D数组重塑为
(1,1,1,2,1)
。我们可以将其重塑为仅相关轴,即(2,1)
和broadcasting
仍然有效,因为前导轴是自动广播的。因此,另一种方法是-你可以定义一个函数
像这样使用它
相关问题 更多 >
编程相关推荐