numpy矩阵遍历元素失败

a是一个网络图的邻接矩阵,维数是185x185,通过如下代码获得:

a = nx.to_numpy_matrix(G)

然后运行如下代码,N是矩阵维数:

b = np.empty([N, N])
for i in range(N):
    for j in range (N):
        if a[i][j] != 0:
            b[i][j] = random.uniform(0,1)

报错提示如下,网上查找资料说到了布尔值类型:

 if a[i][j] != 0:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

 

但是当我自己用numpy定义一个3x3矩阵,进行for循环时并没有报错。

我想请教下怎么解决numpy矩阵以如上方式遍历的问题。

可先将G进行类型转换为数组,用nx.to_numpy_array(),转换后就可直接进行后面遍历修改元素的操作了。举例:

import networkx as nx
import numpy as np
import random
G = np.array(np.random.randint(0,100,100)).reshape(10,10)
print(G)
#a = nx.to_numpy_matrix(G)
b = np.empty([10, 10])
for i in range(10):
    for j in range(10):
        if G[i][j] >50:
            b[i][j] = random.uniform(0, 1)
        else:
            b[i][j]=G[i][j]
print(b)

报错原因:Numpy对逻辑表达式判别不清楚,它可以返回False如果等号两边两个式子是数值相等,也可以返回True因为等号两边两个式子是逻辑相等。它觉得这是模棱两可的,因此放弃做判断,统一用a.any()进行或比较,或a.all()进行与比较。

所以问题应该是处在你的a[i][j],你可以打印一下,看看你的这个是什么,是一个值吗?

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,欢迎您加入CSDN!

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632