猿问

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

我有一个这样的代码:


x = 0

for i in range(100):

    for j in range(100):

        x += f[i, 0] * f[0, j]

这f是一个二维数组。现在,numpy 中是否有可用的函数可以在不使用 for 循环的情况下执行此操作?


三国纷争
浏览 189回答 2
2回答

慕婉清6462132

您可以独立地对第一列和第一行求和,然后取乘积:res = f[:, 0].sum() * f[0, :].sum()这里有一些代码来检查这是否符合您的期望:np.random.seed(0)f = np.random.random((100, 100))x = 0for i in range(100):    for j in range(100):        x += f[i, 0] * f[0,j]res = f[:, 0].sum() * f[0, :].sum()assert np.isclose(x, res)

慕标琳琳

是的,您可以使用 NumPy 的outer(). 这基本上是一个外积问题,您只需将结果外积 n*n 矩阵的元素相加即可。在这里,您在矩阵中使用的唯一值是第一行和第一列。因此,您需要做的就是使用np.outer( docs )取第一行和第一列的外积。这就是您在使用嵌套 for 循环的算法中所做的一切。例子import numpy as npf = 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 192hpaulj建议的替代方案是np.einsum('i,j->', f[:,0], f[0,:])
随时随地看视频慕课网APP

相关分类

Python
我要回答