具有多个元素的数组的真值不明确。使用a.any()或a.all()进行等号问题

问题描述 投票:0回答:3

因此,我知道在线上有很多关于此错误的答案,但是我找不到与numpy有关的一个值,发现某个值等于数组中的某个值,或者我只是傻傻地理解了他们在说什么。所以这是我的代码:

import pandas as pd
import numpy as np
arr_1 = np.array([7, 1, 6, 9, 2, 4])
arr_2 = np.array([5, 8, 9, 10, 2, 3])
arr_3 = np.array([1, 9, 3, 4, 5, 1])

dict_of_arrs = {
    'arr' : [arr_1, arr_2, arr_3]
}
df = pd.DataFrame(dict_of_arrs)
filt = df.arr.apply(lambda x: np.diff(x)>0)
if filt==True:
    pass

并且如标题所示,我得到了错误:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

谢谢

编辑:说而不是通过,我想做类似的事情:

import pandas as pd
import numpy as np
arr_1 = np.array([7, 1, 6, 9, 2, 4])
arr_2 = np.array([5, 8, 9, 10, 2, 3])
arr_3 = np.array([1, 9, 3, 4, 5, 1])

dict_of_arrs = {
    'arr' : [arr_1, arr_2, arr_3]
}
df = pd.DataFrame(dict_of_arrs)
true_list = []
false_list = []
filt = df.arr.apply(lambda x: np.diff(x)>0)
for i in filt:
    if filt==True:
        true_list.append(i)
    else:
        false_list.append(i)
python pandas numpy valueerror ambiguous
3个回答
1
投票

您的第二个代码示例可以使用,但是有错字。而不是比较元素,而是尝试比较整个数组。

for i in filt:
    if filt==True:
        true_list.append(i)
    else:
        false_list.append(i)

应该是:

for i in filt:
    if i == True:
        true_list.append(i)
    else:
        false_list.append(i)

0
投票

[filt只是TrueFalse的数组

import pandas as pd
import numpy as np
arr_1 = np.array([7, 1, 6, 9, 2, 4])
arr_2 = np.array([5, 8, 9, 10, 2, 3])
arr_3 = np.array([1, 9, 3, 4, 5, 1])

dict_of_arrs = {
    'arr' : [arr_1, arr_2, arr_3]
}
df = pd.DataFrame(dict_of_arrs)
filt = df.arr.apply(lambda x: np.diff(x)>0)
print("filt: ",list(filt))
# your filt is a 2d array
filtFlattened = []
# making it 1d
for i in list(filt): filtFlattened+=list(i)
print("filtFlattened: ",filtFlattened)
if any(filtFlattened): print("atleast one is True")
if all(filtFlattened): print("all are True")
filt:  [array([False,  True,  True, False,  True]), array([ True,  True,  True, False,  True]), array([ True, False,  True,  True, False])]
filtFlattened:  [False, True, True, False, True, True, True, True, False, True, True, False, True, True, False]
atleast one is True
© www.soinside.com 2019 - 2024. All rights reserved.