用1D数组乘以Numpy 3D数组
我想把一个三维数组和一个一维数组相乘,具体来说,就是想让三维数组的每一个二维数组(在第三个维度上)都和一维数组的对应元素相乘,计算方式是这样的:
1D_array[d]*2D_array
最后我想得到的结果数组大概是这样的:
[[
[1,1]
[1,1]]
[
[2,2]
[2,2]]
[
[3,3]
[3,3]]]
这个结果是把一个全是1的三维数组(形状是(3,2,2))和数组[1,2,3]正确相乘后的结果。
我尝试了很久,但无论怎么做都无法得到这个结果,只能得到一些不同的变体。请问我该怎么做才能正确实现这个操作呢?
谢谢大家的帮助。
1 个回答
2
假设我们有一个叫 b=np.ones((3,2,2))
的数组和一个叫 a=np.array([1,2,3])
的数组。我很喜欢@Alok的回答,他用简单的 a[:, None, None] * b
这个方法来解决问题,这确实能解决你的问题。不过我不太喜欢这种写法,因为它对数组的维度要求比较严格。我的意思是,这种方法只能用于三维数组,而在我的问题中,b
可能是一个一维或三维的数组,但它们在 axis 0
这一维的长度是一样的。因此,我找到了一种方法,可以让它适应我的问题:
broad_a = np.broadcast_to(a, b.T.shape).T
result = broad_a * b
print(result)
[[
[1,1]
[1,1]]
[
[2,2]
[2,2]]
[
[3,3]
[3,3]]]
这样也能得到你想要的结果。