[英]Delete array from list of arrays Python
我想以這種方式從數組列表中刪除數組
i = np.array([1,2])
facets = [np.array([1,2]),np.array([3,4])]
我想刪除一個元素
facets.remove(np.array(i[0],i[1]))
但得到一個錯誤:
ValueError Traceback (most recent call last)
<ipython-input-131-c0d040653e23> in <module>()
----> 1 facets.remove([i[0],i[2]])
ValueError: The truth value of an array with more than one element is ambiguous.
Use a.any() or a.all()
有辦法解決這個問題嗎?
考慮以下示例:
ls = [1, 2, 3, 1]
ls.remove(1)
此代碼的作用類似於:
ls
的元素。 1
。 在步驟2中,您的代碼嘗試比較兩個numpy數組,例如array1 == array2
。 問題在於numpy會為此比較返回一個真值數組。
>>> np.array([1,2]) == np.array([1,3])
array([ True, False], dtype=bool)
因此,您將必須實現自己的類似remove的方法。
def remove_from_array(base_array, test_array):
for index in range(len(base_array)):
if np.array_equal(base_array[index], test_array):
base_array.pop(index)
break
raise ValueError('remove_from_array(array, x): x not in array')
用法:
i = np.array([1,2])
facets = [np.array([1,2]),np.array([3,4])]
remove_from_array(facets, i)
print facets # [array([3, 4])]
最簡單的方法是使用all()
將列表的每個元素與要刪除的元素進行比較,然后返回所有不匹配的元素。 請注意,這將刪除列表中與要刪除的數組匹配的所有元素。
[ x for x in facets if not (x==i).all()]
請嘗試以下方法:
facets.remove(np.array(i[0],i[1]))
這為我工作如下:
>>> i = list([1,2])
>>> facets = [list([1,2]),list([3,4])]
>>> facets.remove(list([i[0],i[1]]))
>>> facets
[[3, 4]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.