[英]How do I compare two large 2D arrays in Python for exact equality?
如標題所述。 我正在嘗試比較兩個包含單點和單破折號元素的大型(21x21)網格,以查看每個索引處的每個元素是否相同。 使用array1 == array2
會產生以下錯誤:
The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
但是,我還沒有遇到對 a.all/a.any 語法的很好解釋。 點之前是什么? 他們采用什么參數?
編輯:我一直在避免使用 NumPy,但沒有辦法解決。 NumPy 是進口的。 有任何想法嗎?
我正在創建默認的點和破折號網格的代碼部分:
defaultgrid = [['.' for x in range(width)] for y in range(height)]
for x in range(1, 21, 2):
defaultgrid[x] = [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ",
" ", " "]
for x in range(0, 21, 2):
defaultgrid[x] = [".", " ", ".", " ", ".", " ", ".", " ", ".", " ", ".", " ", ".", " ", ".", " ", ".", " ", ".",
" ", "."]
比較 arrays 的字符串怎么樣?
str(arr1) == str(arr2)
如果您確定要使用 Numpy 那么解決錯誤的方法The truth value of an array.....
如下:
如果你有兩個 numpy arrays arr1
和arr2
然后到處比較它們是否相等,而不是通過if arr1 == arr2:
而是通過if np.array_equal(arr1, arr2):
。
或者,如果您確定您的兩個 arrays 具有相同的大小(維度)和類型,那么您也可以像這樣比較它們是否相等if np.all(arr1 == arr2):
。
如果您不使用 Numpy ,則可以像if arr1 == arr2:
一樣比較兩個嵌套列表。
你說你使用 numpy 只是為了做np.copy()
。 要制作列表的深層副本,您可以使用標准copy.deepcopy() (您必須import copy
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.