[英]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.any
或np.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將s
與sets
每個元素進行比較。 當我們將一個列表與另一個列表[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.