如何在Numpy中对逐行乘法和重加法进行矢量化?

如何在Numpy中对逐行乘法和重加法进行矢量化?,numpy,Numpy,有没有办法从代码中删除for循环 for iteration in range(1, 101): rs[iteration] += rs[iteration - 1] * adjacency_matrix rs矩阵用初始值填充,每次迭代向量rs[iteration]都是使用前一次迭代乘以邻接矩阵计算的,正如注释中所指出的,您只需计算邻接矩阵乘以初始条件的幂。如果您只想在时间100时得到结果,那么可以使用重复的平方运算非常快速地完成100=64+32+4,您只需要大约5个倍数。如果你想要

有没有办法从代码中删除for循环

for iteration in range(1, 101):
    rs[iteration] += rs[iteration - 1] * adjacency_matrix

rs
矩阵用初始值填充,每次迭代向量
rs[iteration]
都是使用前一次迭代乘以
邻接矩阵

计算的,正如注释中所指出的,您只需计算邻接矩阵乘以初始条件的幂。如果您只想在时间100时得到结果,那么可以使用重复的平方运算非常快速地完成
100=64+32+4
,您只需要大约5个倍数。如果你想要所有中间结果,那么如果你的矩阵是对称的(邻接矩阵通常是对称的),那么首先对矩阵进行对角化是很有用的。

似乎
rs
矩阵存储了
邻接矩阵
乘以初始值的元素级幂?这样的串行计算很难实现“矢量化”。通常编译的
numpy
计算是“并行”的,就好像所有元素都是一次计算的,而不是一个接一个地计算(即使它在C代码中迭代)但是,
ufunc
方法累积到这类迭代中。例如
cumsum
。我想是这样的,它最初是用
(1-beta)/n
值填充的,除了第0行的初始值是
1/n
,并且这些初始值被添加到
rs[迭代-1]*邻接矩阵
。你有如何使用ufunc进行乘法和加法的技巧吗。
cumsum
似乎只是累加。这不是python的问题。问题是rs包含初始值,
rs=np.full(shape=(101,n),fill\u value=(1-beta)/n)
,我必须加上它,所以它不是一个直接乘法。@sukisule我不明白这有什么关系。也许你可以详细说明一下。