我有一个2D和一个3D numpy数组,我想用2D数组的每一列乘以它各自的数组。Eg倍增
[[[1. 1.]
[1. 1.]
[1. 1.]]
[[1. 1.]
[1. 1.]
[1. 1.]]]
由
[[ 5 6]
[ 4 7]
[ 8 10]]
给予
[[[ 5. 5.]
[ 4. 4.]
[ 8. 8.]]
[[ 6. 6.]
[ 7. 7.]
[10. 10.]]]
我目前的代码是:
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)
使用来自Multiplying across in a numpy array的答案 但是有没有一种没有for循环的方法呢?非常感谢,丹
在
2D
数组中的nth
列将是第二个轴,通过3D
数组中的nth
数组,您似乎是指沿着第一个轴的2D
切片。所以,我们的想法是沿着three_d_array
对齐第一个轴,沿着two_d_array
对齐第二个轴。在其余的轴中,two_d_array
的第一个轴似乎与three_d_array
的第二个轴对齐。你知道吗所以,要解决这个问题,我们可以使用两种方法和函数。你知道吗
进近#1
转置
2D
数组,然后将维数扩展到3D
以在末尾有一个单态数组,然后与其他3D
数组执行元素相乘,利用broadcasting
实现向量化解决方案-进近#2
与
np.einsum
-相关问题 更多 >
编程相关推荐