首页 > 解决方案 > 在python中将2D(5x3)数组乘以1D(5x1)数组

问题描述

我想问一个关于将二维数组乘以一维数组的问题。

我有以下 2 个 numpy 数组:

>> array1_test
array([14.0067, 12.0107, 12.0107, 15.9994, 12.0107])

>> array2_test
array([[49.725, 20.724, 59.915],
       [51.168, 20.935, 60.26 ],
       [51.32 , 21.167, 61.757],
       [50.327, 21.247, 62.472],
       [51.732, 22.136, 59.483]])

我想将每一行array2_test乘以array1_test.

我使用while循环尝试了这个:

i = 0
while i < len(array2_test):
    print(array1_test[i] * array2_test[i])
    i += 1

这产生了我的预期结果:

[696.4831575 290.2748508 839.2114305]
[614.5634976 251.4440045 723.764782 ]
[616.389124  254.2304869 741.7447999]
[805.2018038 339.9392518 999.5145168]
[621.3375324 265.8688552 714.4324681]

但我想将这些存储在以下形式的数组中:

array([[696.4831575 290.2748508 839.2114305],
[614.5634976 251.4440045 723.764782 ],
[616.389124  254.2304869 741.7447999],
[805.2018038 339.9392518 999.5145168],
[621.3375324 265.8688552 714.4324681]])

我尝试执行以下操作:

i = 0
mylist = []
while i < len(array2_test):
    mylist += (array1_test[i] * array2_test[i])
    i += 1

但这不会产生任何结果。

怎样才能达到这样的结果?

我的直觉是将乘法结果转换为一个列表并附加到,mylist但由于我需要返回一个数组,我想知道是否可以使用更短的解决方案。

标签: pythonarrays

解决方案


诀窍是通过切片将一维形状数组(5,)转换为二维形状数组(这会创建一个新轴)。这允许您简单地将数组相乘并让 NumPy 处理其余部分:(5, 1)None

>>> array2_test * array1_test[:, None]
array([[696.4831575, 290.2748508, 839.2114305],
       [614.5634976, 251.4440045, 723.764782 ],
       [616.389124 , 254.2304869, 741.7447999],
       [805.2018038, 339.9392518, 999.5145168],
       [621.3375324, 265.8688552, 714.4324681]])

推荐阅读