【发布时间】:2022-11-01 11:29:35
【问题描述】:
我正在寻找在取决于索引条件的 numpy 矩阵中执行操作的最佳方法。
我正在处理的矩阵是一个对称方阵,特别是它是一个加权邻接矩阵。
目前我有三个嵌套循环,计算成本很高。
下面的代码记录了我如何执行操作以及循环执行期间的条件。
# matrix is a numpy.matrix square matrix, in particular a weighted adjacency matrix
result_vector = []
for i in range(matrix.shape[0]):
aux = 0
for j in range(matrix.shape[0]):
if j != i:
for k in range(matrix.shape[0]):
if k != j:
aux += (matrix[i,j]*matrix[i,k])*(1 - matrix[j,k])
result_vector.append(aux)
result_vector = np.array(result_vector)
我尝试使用numpy.einsum,但由于操作中的减法我没有成功。
有没有办法在避免循环的同时执行操作?
【问题讨论】:
-
首先,最好坚持使用普通的 numpy 数组;不鼓励使用
np.matrix,因为它通常比有用更令人困惑。@是矩阵乘法运算符。替换您的if逻辑可能很棘手,至少在没有彻底可视化正在发生的事情的情况下并非如此。制作一个或多个mask数组可能有助于在对角线上/在对角线之外为真或假。替换循环需要考虑对整个数组的操作,而不是逐个元素。
标签: python numpy loops numpy-ndarray