我正在尝试确定矩阵的最大元素,但不断出现错误(For Loop 是必须的)

I am trying to determine the max element of the matrix but keep getting error (For Loop is MUST)

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'

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

你的第二个错误是因为 a[n].all() 是一个函数,而不是属性 - 因此 ()。此外,如果第 n 行中的所有值都是 non-zero(即真实),它只是 returns 真 - 不是您想要的

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

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)

尽量避免for循环,试试numpy.ndarray.max()函数:

max = a.max()
print(max)