【发布时间】:2016-01-23 04:58:50
【问题描述】:
我有一个带有负 double 元素的 numpy 数组 arr。它的形状为(1000,1000)。由于元素很复杂,我们使用arr.real 仅评估实部。
我第一次尝试
for i in arr.real:
if i < 0:
print(i)
这给出了以下 ValueError:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
但是,如果我尝试
for i in arr.real:
if i.any() < 0:
print(i)
或
for i in arr.real:
if i.all() < 0:
print(i)
没有输出。即使确实存在负值,也不会打印任何内容。
我该如何纠正这个问题?我有什么误解?
编辑:
for i in arr.real:
print(i[i<0])
确实有效。但是,如何搜索两个条件?例如,
i < 0 and i > -1e-12
【问题讨论】:
-
正确的方法是
(i < 0).any()。与.all()类似。 -
@Divakar 谢谢。你能给我解释一下区别吗?
(i < 0).any()似乎输出正值 -
好吧,
i是arr的一部分,因此i.any()不会真正反映您在arr中寻找负面元素的想法。这就是为什么第二种方法不起作用的原因。第一个不起作用,因为i仍然不是标量。 -
for i in arr: if (i < 0).any(): print(i)这会在数组中输出正值(最初是复杂的)。这样做的正确方法是什么? -
您是说您正在处理具有复数的数组吗?那么,如何定义正值,因为会有实部和虚部?然后,比较真实和想象。部分并根据您对积极的定义继续进行。
标签: python arrays numpy multidimensional-array