Python\Numpy中数组行乘法循环
我想把数组A的每一行都乘以数组B的每一行,这样我就能得到和前两个数组一样数量的数组,每个数组的行数和列数也都相同。
有没有人能帮帮我?
pseudo-code
from numpy import *
import numpy as np
def multipar():
A = array( [ (0.1,0.5,0.2,0.2), (0.2,0.5,0.1,0.2), (0.7,0.1,0.1,0.1) ] )
B = array( [ (1,2,3,4), (2,3,4,5), (3,4,5,6) ] )
for i in len(A):
average = A[i]*B
print average
multipar()
我希望每个得到的新数组都能这样生成。
Array C
(0.1,0.5,0.2,0.2) * (1,2,3,4);
(0.1,0.5,0.2,0.2) * (2,3,4,5);
(...)
Array D
(0.2,0.5,0.1,0.2) * (1,2,3,4);
(...)
1 个回答
2
你可以尝试在更高的维度上做一些有趣的事情。可以把 A
或者 B
扩展到第三维度,然后把它和没有扩展的那个进行相乘。比如:
A = array( [ (0.1,0.5,0.2,0.2), (0.2,0.5,0.1,0.2), (0.7,0.1,0.1,0.1) ] )
B = array( [ (1,2,3,4), (2,3,4,5), (3,4,5,6) ] )
tiled = tile (B, (3,1,1)).swapaxes (0,1)
all_results = A*tiled
现在你所有的结果数组都在 all_results
里;你可以很方便地用 all_results[0]
、all_results[1]
等来获取它们。
补充说明:针对最近的问题更新: 如果你真的需要把结果数组分开,那么还有两个选择:
C, D, E = all_results
把我第一个建议中的最后两条语句替换为:
C = B * A[0]
D = B * A[1]
E = B * A[2]
如果你确实需要将结果放在不同的数组里,并且行数很多,以至于需要用到循环,那么你可以这样做(感谢 @Jaime 提供的广播表示法):
all_results = A[:, None, :] * B[None, :, :]
for i, res in enumerate (all_results):
locals () ['result%d'%i] = res
现在,乘以第一行的结果在一个叫 res1
的变量里,第二行的结果在 res2
里,依此类推。