Python 使用numpy将二维数组中的第n列乘以三维数组中的第n列

Python 使用numpy将二维数组中的第n列乘以三维数组中的第n列,python,arrays,numpy,Python,Arrays,Numpy,我有一个2D和3D numpy数组,我想用2D数组的每一列乘以它各自的数组。Eg倍增 [[[1. 1.] [1. 1.] [1. 1.]] [[1. 1.] [1. 1.] [1. 1.]]] 借 给予 我目前的代码是: three_d_array = np.ones([2,3,2]) two_d_array = np.array([(5,6), (4,7), (8,10)]) list_of_arrays = [] for i in range(np.shape(tw

我有一个2D和3D numpy数组,我想用2D数组的每一列乘以它各自的数组。Eg倍增

[[[1. 1.]
  [1. 1.]
  [1. 1.]]

 [[1. 1.]
  [1. 1.]
  [1. 1.]]]

给予

我目前的代码是:

three_d_array = np.ones([2,3,2])
two_d_array = np.array([(5,6), (4,7), (8,10)])

list_of_arrays = []

for i in range(np.shape(two_d_array)[1]):
    mult = np.einsum('ij, i -> ij', three_d_array[i], two_d_array[:,i])
    list_of_arrays.append(mult)

stacked_array = np.stack(list_of_arrays, 0)
使用来自
但是有没有一种不用for循环的方法呢?非常感谢,Dan

2D
数组中的
nth
列将是第二个轴,而在
3D
数组中的
nth
数组中,似乎您指的是沿第一个轴的
2D
切片。因此,我们的想法是将第一个轴沿
three_d_array
对齐,第二个轴沿
three_d_array
对齐。在其余的轴中,
two\u-d\u-array
的第一个轴似乎与
two\u-d\u-array
的第二个轴对齐

因此,要解决这个问题,我们可以使用两种方法和函数

方法#1

2D
数组转置,然后将维度扩展到
3D
以在末尾有一个单态数组,然后与其他
3D
数组执行元素相乘,利用
广播
实现矢量化解决方案-

three_d_array*two_d_array.T[...,None]
方法#2

使用
np.einsum
-

np.einsum('ijk,ji->ijk',three_d_array, two_d_array)

谢谢很明显,我还没有完全了解einsum,但这非常有效!
three_d_array*two_d_array.T[...,None]
np.einsum('ijk,ji->ijk',three_d_array, two_d_array)