Python 如何使用 numpy.all() 或 numpy.any()?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/40820779/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to use numpy.all() or numpy.any()?
提问by CodingAmateur
I am trying to search in a 2D numpy array for a specific value, the get_above method returns a list of coordinates above the character 'initial char'
我正在尝试在 2D numpy 数组中搜索特定值,get_above 方法返回字符“初始字符”上方的坐标列表
def get_above(current, wordsearch):
list_of_current_coords = get_coords_current(current, wordsearch)
#print(list_of_current_coords)
length = len(list_of_current_coords)
first_coords = []
second_coords = []
for x in range(length):
second = list_of_current_coords[x][1]
new_first = list_of_current_coords[x][0] - 1
first_coords.append(new_first)
second_coords.append(second)
combined = [first_coords, second_coords]
above_coords = []
for y in range(length):
lst2 = [item[y] for item in combined]
above_coords.append(lst2)
return above_coords
def search_above(initial_char, target, matrix):
above_coords = get_above(initial_char, matrix)
length = len(above_coords)
for x in range(length):
if matrix[above_coords[x]] == target:
print(above_coords[x])
else:
print('not found')
And I get this error when calling the function:
调用函数时出现此错误:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
ValueError:包含多个元素的数组的真值不明确。使用 a.any() 或 a.all()
Any help would be appreciated!
任何帮助,将不胜感激!
回答by hpaulj
The ValueError is caused by an array comparison in the if
statement.
ValueError 是由if
语句中的数组比较引起的。
Lets make a simpler test case:
让我们做一个更简单的测试用例:
In [524]: m=np.arange(5)
In [525]: if m==3:print(m)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-525-de75ce4dd8e2> in <module>()
----> 1 if m==3:print(m)
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
In [526]: m==3
Out[526]: array([False, False, False, True, False], dtype=bool)
The m==3
test produces a boolean array. That can't be used in an if
context.
该m==3
测试产生一个布尔数组。这不能在if
上下文中使用。
any
or all
can condense that array into one scalar boolean:
any
或者all
可以将该数组压缩为一个标量布尔值:
In [530]: (m==3).any()
Out[530]: True
In [531]: (m==3).all()
Out[531]: False
So in
所以在
if matrix[above_coords[x]] == target:
print(above_coords[x])
look at matrix[above_coords[x]] == target
, and decide exactly how that should be turned into a scalar True/False value.
查看matrix[above_coords[x]] == target
,并确切地决定如何将其转换为标量 True/False 值。