numpy的的fromfunction
方法創建兩個陣列,其中一個在每一個單元中的值是該單元的X索引,和一個其中每一個細胞是細胞的y折射率。然後,它會將您已在
通過在你第一次調用該函數的功能,但它確實是這樣的:
x=[[0 0 0]
[1 1 1]
[2 2 2]]
y=[[0 1 2]
[0 1 2]
[0 1 2]]
result = fn(x,y)
其中,fn是您的lambda表達式。 numpy數組的添加相當於元素明智的添加,所以這表現得如你所期望的那樣。但是,在第二個示例中,您將max用作函數,並且在numpy數組上未定義python builtin max函數。這是因爲蟒蛇最大的定義方式是這樣的:
def max(x,y):
if x>y:
return x
return y
然而,x>y
是numpy的數組,如果x和y是numpy的陣列,以及if <numpy array>
並沒有太大的意義,這是爲什麼我們得到的錯誤消息:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
總之,不被在每個單獨的對數字進行要傳遞到numpy.fromfunction
的功能,而是將矩陣作爲一個整體,所產生上面所解釋的。 Numpy用於計算元素最大值的方法是numpy.maximum
,因此用numpy.maximum
替換max
,您的代碼將按預期工作。
最後一個註釋:lambda x,y: max(x,y)
相當於max
,因爲兩者都表示一個函數,它接受兩個參數並返回其最大值。所以,當你重寫該行代碼,你可以寫:
B=numpy.fromfunction(numpy.maximum,(3,3),dtype=int)
感謝您的回答克里斯托弗 – user7182979
是我的榮幸!如果這裏的答案解決了您的問題,請將它標記爲已接受,如果您不介意:) –