使用Numpy的矩阵运算的简单方法

时间:2018-12-24 23:43:19

标签: python arrays algorithm numpy matrix

我有这样的代码:

x = 0
for i in range(100):
    for j in range(100):
        x += f[i, 0] * f[0, j]

这里f是2D数组。现在,在numpy中有可用的函数可用于执行此操作而无需使用for循环吗?

2 个答案:

答案 0 :(得分:2)

您可以将第一列和第一行分别求和,然后乘积:

web-sys

这里有一些代码可以检查您所期望的内容:

res = f[:, 0].sum() * f[0, :].sum()

答案 1 :(得分:1)

是的,您可以使用NumPy的outer()。这基本上是一个外部乘积问题,您只需将所得外部乘积n * n矩阵的元素求和即可。在这里,矩阵中使用的唯一值是第一行和第一列。

因此,您要做的就是使用np.outerdocs)来获取第一行和第一列的外部乘积。这就是您使用嵌套的for循环在算法中所做的所有事情。

示例

import numpy as np

f = np.random.randint(1, 9, (3, 3)) # Create a test 3x3 matrix 

col = f[:, 0] # first column enteries [5, 3, 8]
row = f[0, :] # first row enteries [5, 3, 4]
summ = np.sum(np.outer(row, col))

print (f)
print ('The sum is %d' %summ)

#[[5 3 4]
# [3 8 1]
# [8 7 2]]

# The sum is 192
hpaulj建议的

替代

np.einsum('i,j->', f[:,0], f[0,:])