1

我试图将数组 A 的每一行乘以另一个数组 (B) 中的每一行,以获得与前两个数组具有相同行数和列数的 len(A) 个数组。

有什么帮助吗?

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);
(...)
4

1 回答 1

2

你可以用更高的维度做一些有趣的事情。扩展任何一个AB进入第三个维度,然后将其与未扩展的那个相乘。例如:

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_resultsall_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,依此类推。

于 2013-03-14T19:57:12.867 回答