如何修复Python中numpy二维数组for循环的ValueError?
问题分析与解决
错误原因
你的代码里,Q2[i]取的是二维数组中的一整行(包含10个元素的一维数组),执行Q2[i] % 2 == 0会得到一个长度为10的布尔数组。直接把这个布尔数组放在if判断里时,Python无法确定整个数组的真假(是只要有一个True算真,还是全部True才算真?),因此抛出ValueError。
修正后的代码(嵌套for循环)
要统计所有元素里的偶数,需要遍历数组的每一行,再遍历每行里的每个元素:
import numpy as np Q2 = np.random.randint(0, 1000, size=(10, 10)) print("The list of numbers in Q2 array = ", Q2) even_count = 0 odd_count = 0 # 外层循环遍历每一行 for row in Q2: # 内层循环遍历当前行的每个元素 for num in row: if num % 2 == 0: even_count += 1 else: odd_count += 1 print("The count of the even numbers in Q2 array = ", even_count)
另一种索引式遍历写法
如果习惯用索引操作数组,也可以这样写:
import numpy as np Q2 = np.random.randint(0, 1000, size=(10, 10)) print("The list of numbers in Q2 array = ", Q2) even_count = 0 odd_count = 0 # 遍历所有行索引 for i in range(Q2.shape[0]): # 遍历当前行的所有列索引 for j in range(Q2.shape[1]): if Q2[i][j] % 2 == 0: even_count += 1 else: odd_count += 1 print("The count of the even numbers in Q2 array = ", even_count)
额外说明(非循环写法,供参考)
如果作业不强制要求用for循环,numpy有更高效的写法:
even_count = np.sum(Q2 % 2 == 0)
Q2 % 2 == 0会生成一个和原数组同形状的布尔数组,np.sum()会把所有True(等价于1)加起来,直接得到偶数总数。
内容的提问来源于stack exchange,提问作者Emily Mitchell
相关产品推荐
相关产品推荐

