为了账号安全,请及时绑定邮箱和手机立即绑定

我试图确定矩阵的最大元素,但不断收到错误(For 循环是必须的)

我试图确定矩阵的最大元素,但不断收到错误(For 循环是必须的)

汪汪一只猫 2024-01-16 15:19:40
a = np.random.randint(1,100,(5,5))max=a[0]for n in range(1,100):    if(a[n] > max):         max = a[n]print(max)当我运行它时;它给出了这个错误if(a[n] > max):ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()我尝试修复它,但它给出了另一个错误a = np.random.randint(1,100,(5,5))max=a[0]for n in range(1,100):    if(a[n].all > max):        max = a[n]print(max)当我再次运行时会弹出此错误if(a[n].all > max):TypeError: '<' not supported between instances of 'int' and 'builtin_function_or_method'
查看完整描述

2 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

您的第一个错误是因为它a[n]是一个列表(因为您的矩阵是二维的)。


你的第二个错误是因为a[n].all()是一个函数,而不是一个属性 - 因此(). 另外,如果第 ' 行中的所有值n都非零(即 true),它只会返回 True - 这不是您想要的。


要找到整个矩阵的最大值,您需要执行一些嵌套循环(或展平矩阵并按照您的方式执行单个循环)。尝试:


for i in range(5):

    for j in range(5):

        if a[i][j] > max_val:

            max_val = a[i][j]

您还需要将初始最大值更改为二维矩阵的第一个值,因此max_val = a[0][0]。


但是,既然您正在使用numpy,那就这样做吧np.amax(a)。


完整代码应该是:


a = np.random.randint(1,100,(5,5))


max_val = a[0][0]

for i in range(5):

    for j in range(5):

        if a[i][j] > max_val: 

            max_val = a[i][j]


print(max_val)


查看完整回答
反对 回复 2024-01-16
?
ibeautiful

TA贡献1993条经验 获得超5个赞

您应该尽可能避免 for 循环,让我们尝试一下numpy.ndarray.max()函数:


max = a.max()

print(max)


查看完整回答
反对 回复 2024-01-16
  • 2 回答
  • 0 关注
  • 36 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信