【发布时间】:2017-06-25 00:37:57
【问题描述】:
我需要使用矩阵形式将for 循环转换为表达式。我有一个矩阵C:
矩阵C:
array([[0, 1, 1],
[1, 0, 0],
[1, 0, 0]])
一个向量delta_E:
array([ 4., 2., 4., 1.])
A 是一个由零组成的矩阵,维数为C,一个向量E,长度为3,一个列表indices:
indices = [1, 1, 0, 1]
我找到了 C 的列索引:
i0, i1 = np.where(C[indices] == 1)
他们是:
i0 = [0, 1, 2, 3]
i1 = [0, 0, 1, 0]
我想将i0 和i1 中包含的A 索引加1,并将i1 中包含的E 索引增加delta_E:
for k, i, j in enumerate(indices[i0], i1):
A[i,j] += 1
A[j,i] += 1
E[i] += delta_E[k]
结果是:
矩阵A:
array([[0, 4, 1],
[4, 0, 0],
[1, 0, 0]])
矩阵E:
array([4, 7, 0])
是否可以将上面的for循环转换为矩阵表达式?
【问题讨论】:
-
你看过 numpy 吗?
-
是的,sobek,我试试……但你知道,numpy 有很多方法。
-
我正在尝试重新创建您的计算,并且在迭代中遇到了一些错误。枚举需要一个 zip,
delta_E[4]的索引超出范围。