簡體   English   中英

Python對數組的列表理解

[英]Python list comprehension over arrays

我有一個numpy數組的列表,我試圖用原始列表的所有元素(一個除外)創建一個新列表。 我有以下代碼:

for i in xrange(FOLDS):
    #fold_sample_sets and fold_sample_labels are a list of 10 numpy arrays.
    training_samples = [s for s in fold_sample_sets if fold_sample_sets.index(s) != i]
    training_labels = [l for l in fold_label_sets if fold_label_sets.index(l) != i]

我已經在解釋器中嘗試了一些小例子,這似乎很有用。 但是在這里我得到以下錯誤:

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

對於如何解決這個問題,有任何的建議嗎?

您可以使用數組切片,

for i in range(FOLDS):
    # omit set #i from the list
    training_samples = fold_sample_sets[:i] + fold_sample_sets[i+1:]
    training_labels  = fold_label_sets [:i] + fold_label_sets [i+1:]

在您的理解中,您有:

if fold_sample_sets.index(s) != i

if的條件必須為True / False。 通常,當條件是具有多個元素的數組時,將產生此ValueError。 例如:

if np.array([True,False]):
    print(1)

這個條件是正確的還是錯誤的? 還是兩者? 是否應該打印1?

該錯誤提示您使用np.anynp.all將多個值減小為一個。 另一種選擇是確保您不將邏輯運算符應用於多元素數組。

fold_sample_sets.index(s) != i是什么(對於s的典型值)?


sets = [np.ones((2,2))*i for i in range(5)]
[s for s in sets if sets.index(s)!=3]  # this error
sets.index(s)   # same error

看起來list .index不適用於數組元素。 為了計算此索引,Python將ssets每個元素進行比較。 當我們將一個列表與另一個列表[1,2]==[3,4] ,我們得到一個簡單的布爾值False 但是,當我們將一個數組與另一個數組進行比較時,會得到另一個數組: np.array([1,2])==np.array([3,4])array([False, False], dtype=bool) 這就是產生歧義的地方。

進行相同理解的更好方法(不帶此.index )是:

[s for j,s in enumerate(sets) if j!=i]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM