Python: "Use a.any() or a.all()" 遍历 numpy.ndarray
Python: "Use a.any() or a.all()" while traversing a numpy.ndarray
像这样的numpy.ndarray
:
myarray=
array([[ 0.47174344, 0.45314669, 0.46395022, 0.47440382, 0.50709627,
0.53350065, 0.5233444 , 0.49974663, 0.48721607, 0.46239652,
0.4693633 , 0.47263569, 0.47591957, 0.436558 , 0.43335574,
0.44053621, 0.42814804, 0.43201894, 0.43973886, 0.44125302,
0.41176999],
[ 0.46509004, 0.46221505, 0.48824086, 0.50088744, 0.53040384,
0.53592231, 0.49710228, 0.49821022, 0.47720381, 0.49096272,
0.50438366, 0.47173162, 0.48813669, 0.45032002, 0.44776794,
0.43910269, 0.43326132, 0.42064458, 0.43472954, 0.45577299,
0.43604956]])
我想计算有多少单元格超过给定值,比方说 0.5
,然后将那些不超过给定值的单元格设置为 0.0
。这就是我所做的:
count=0
value=0.5
for i in range(myarray.shape[0]):
for j in range(myarray.shape[1]):
if myarray[i][j]<value:
myarray[i][j]=0
elif myarray[i][j]>=value:
count=count+1
percentage=round(100*count/(myarray.shape[0]*myarray.shape[1]),2)
但是,我收到此错误:ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
,指向我检查 if myarray[i][j]<value
的行。
为什么会出现这种情况,如何解决?真值是多少?
通常情况下,您可以比较两个数字以获得真值。例如:
elem = 5
if elem < 6:
# do something
相当于:
if true:
# do something
但是,您不能将数组与值进行比较。例如:
elem = [5,7]
if elem < 6:
# this doesn't make sense
相反,您可以获得任何或所有元素是否满足条件的真值。例如:
elem = np.array([5,7])
if np.any(elem<6):
# this is true, because 5 < 6
if np.all(elem<6):
# this isn't true, because 7 > 6
我 运行 你上面的示例代码并没有发现错误,所以我不确定问题是什么。但这是你应该注意的。考虑打印您正在比较的元素以查看它是否是一个数组。
此外,这是执行您想要执行的操作的较短方法:
myarray = np.array( putarrayhere )
count = sum(myarray >= value)
是的,我认为您的 numpy.array 有一个额外的括号或者它包含另一个数组。
尝试手动将数组设置为
myarray=np.array([[ 0.47174344, 0.45314669, 0.46395022, 0.47440382, 0.50709627,0.53350065, 0.5233444 , 0.49974663, 0.48721607, 0.46239652, 0.4693633 , 0.47263569, 0.47591957, 0.436558 , 0.43335574,0.44053621, 0.42814804, 0.43201894, 0.43973886, 0.44125302, 0.41176999],[ 0.46509004, 0.46221505, 0.48824086, 0.50088744, 0.53040384,0.53592231, 0.49710228, 0.49821022, 0.47720381, 0.49096272,0.50438366, 0.47173162, 0.48813669, 0.45032002, 0.44776794,0.43910269, 0.43326132, 0.42064458, 0.43472954, 0.45577299,0.43604956]])
代码有效
但设置:
myarray=np.array([[[ 0.47174344, 0.45314669, 0.46395022, 0.47440382, 0.50709627,0.53350065, 0.5233444 , 0.49974663, 0.48721607, 0.46239652, 0.4693633 , 0.47263569, 0.47591957, 0.436558 , 0.43335574,0.44053621, 0.42814804, 0.43201894, 0.43973886, 0.44125302, 0.41176999],[ 0.46509004, 0.46221505, 0.48824086, 0.50088744, 0.53040384,0.53592231, 0.49710228, 0.49821022, 0.47720381, 0.49096272,0.50438366, 0.47173162, 0.48813669, 0.45032002, 0.44776794,0.43910269, 0.43326132, 0.42064458, 0.43472954, 0.45577299,0.43604956]]])
产生了类似的错误
不管错误你可以简单地做:
myarray[myarray<value]=0
np.count_nonzero(myarray)
得到你想要的结果
像这样的numpy.ndarray
:
myarray=
array([[ 0.47174344, 0.45314669, 0.46395022, 0.47440382, 0.50709627,
0.53350065, 0.5233444 , 0.49974663, 0.48721607, 0.46239652,
0.4693633 , 0.47263569, 0.47591957, 0.436558 , 0.43335574,
0.44053621, 0.42814804, 0.43201894, 0.43973886, 0.44125302,
0.41176999],
[ 0.46509004, 0.46221505, 0.48824086, 0.50088744, 0.53040384,
0.53592231, 0.49710228, 0.49821022, 0.47720381, 0.49096272,
0.50438366, 0.47173162, 0.48813669, 0.45032002, 0.44776794,
0.43910269, 0.43326132, 0.42064458, 0.43472954, 0.45577299,
0.43604956]])
我想计算有多少单元格超过给定值,比方说 0.5
,然后将那些不超过给定值的单元格设置为 0.0
。这就是我所做的:
count=0
value=0.5
for i in range(myarray.shape[0]):
for j in range(myarray.shape[1]):
if myarray[i][j]<value:
myarray[i][j]=0
elif myarray[i][j]>=value:
count=count+1
percentage=round(100*count/(myarray.shape[0]*myarray.shape[1]),2)
但是,我收到此错误:ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
,指向我检查 if myarray[i][j]<value
的行。
为什么会出现这种情况,如何解决?真值是多少?
通常情况下,您可以比较两个数字以获得真值。例如:
elem = 5
if elem < 6:
# do something
相当于:
if true:
# do something
但是,您不能将数组与值进行比较。例如:
elem = [5,7]
if elem < 6:
# this doesn't make sense
相反,您可以获得任何或所有元素是否满足条件的真值。例如:
elem = np.array([5,7])
if np.any(elem<6):
# this is true, because 5 < 6
if np.all(elem<6):
# this isn't true, because 7 > 6
我 运行 你上面的示例代码并没有发现错误,所以我不确定问题是什么。但这是你应该注意的。考虑打印您正在比较的元素以查看它是否是一个数组。
此外,这是执行您想要执行的操作的较短方法:
myarray = np.array( putarrayhere )
count = sum(myarray >= value)
是的,我认为您的 numpy.array 有一个额外的括号或者它包含另一个数组。
尝试手动将数组设置为
myarray=np.array([[ 0.47174344, 0.45314669, 0.46395022, 0.47440382, 0.50709627,0.53350065, 0.5233444 , 0.49974663, 0.48721607, 0.46239652, 0.4693633 , 0.47263569, 0.47591957, 0.436558 , 0.43335574,0.44053621, 0.42814804, 0.43201894, 0.43973886, 0.44125302, 0.41176999],[ 0.46509004, 0.46221505, 0.48824086, 0.50088744, 0.53040384,0.53592231, 0.49710228, 0.49821022, 0.47720381, 0.49096272,0.50438366, 0.47173162, 0.48813669, 0.45032002, 0.44776794,0.43910269, 0.43326132, 0.42064458, 0.43472954, 0.45577299,0.43604956]])
代码有效
但设置:
myarray=np.array([[[ 0.47174344, 0.45314669, 0.46395022, 0.47440382, 0.50709627,0.53350065, 0.5233444 , 0.49974663, 0.48721607, 0.46239652, 0.4693633 , 0.47263569, 0.47591957, 0.436558 , 0.43335574,0.44053621, 0.42814804, 0.43201894, 0.43973886, 0.44125302, 0.41176999],[ 0.46509004, 0.46221505, 0.48824086, 0.50088744, 0.53040384,0.53592231, 0.49710228, 0.49821022, 0.47720381, 0.49096272,0.50438366, 0.47173162, 0.48813669, 0.45032002, 0.44776794,0.43910269, 0.43326132, 0.42064458, 0.43472954, 0.45577299,0.43604956]]])
产生了类似的错误
不管错误你可以简单地做:
myarray[myarray<value]=0
np.count_nonzero(myarray)
得到你想要的结果