2017-07-31 41 views
1

我在那裏我計算與條件兩個浮點值的功能,如果將下面語句返回值:錯誤的解決方案:具有多個元素的數組的真值是不明確的。使用a.any()或a.all()

# The function inputs are 2 lists of floats 
def math(list1,list2): 
    value1=math(...) 
    value2=more_math(...) 
    z=value2-value1 
    if np.any(z>0): 
    return value1 
    elif z<0: 
    return value2 

起初,我遇到標題錯誤。我已經嘗試使用np.any()和np.all(),正如錯誤和問題所提示的那樣,沒有運氣。如果z> 0(如果它甚至可能的話)從if語句生成的,我正在尋找一種方法來顯式分析布爾數組的每個元素(例如,對於w/2元素的[True,False])。如果我使用np.any(),則當輸入列表不是這種情況時,它始終返回值1。我的問題與The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()?類似,但未得到答覆。

+0

你可以請編輯一個堆棧跟蹤到你的問題? – rlee827

+0

如果'z'是一個數組,你是什麼意思的' z> 0'所有'z'中的元素大於零或者'z'中的至少一個元素大於零? – akilat90

回答

0

下面是一個簡單的例子:

a = np.array([1,2,3,4]) #for simplicity 
b = np.array([0,0,5,5]) 
c = b.copy() 
condition = a>b #returns an array with True and False, same shape as a 
c[condition] = a[condition] #copy the values of a into c 

numpy的陣列可以通過TrueFalse,這也允許overwirte保存在這些的indeces的值來索引。

注意:b.copy()很重要,因爲其他明智的你在b的輸入也會改變。 (最好是你嘗試一次沒有copy(),然後看看會發生什麼b

0

如果z是一個數組

z=value2-value1 
    if np.any(z>0): 
    return value1 
    elif z<0: 
    return value2 

z>0z<0將布爾數組。 np.any(z>0)將該數組減少爲一個True/False值,該值在if語句中起作用。但z<0仍然是多值,並與elif頭痛。

相關問題