![](/img/trans.png)
[英]How do I compare two large 2D arrays in Python for exact equality?
[英]How do I compare two arrays in python?
假設我有兩個 arrays
array1=np.array([1,2,3,4,5,6,7,8,9,10])
array2=np.array([11,1,2,4,10,60,0,3,20,33])
我想比較兩個 arrays 並存儲更大的值。 我想編寫一個代碼來檢查 array1 的第一個元素和 array2 的第一個元素,並將它們之間的最大值存儲在一個新的數組中,依此類推。
我用這段代碼試過了
array3=[]
i=0
while i<=len(array1):
if array1[i]>array2[i]:
array3.append(i)
但是,代碼沒有給出任何 output 並繼續運行。 我要使用的兩個數組非常大,所以正常的循環方法也適用於大 arrays 嗎?
如果您使用的是 numpy,則最好一直使用 numpy。 與迭代方法相比,它會更快,並且使用更少的 memory(並且更具可讀性)。
np.max([array1, array2], axis=0)
你的循環是無限的,因為你的i
永遠不會改變。 如果您解決了這個問題(通過添加i += 1
或通過使用for i in range(0, len(array1)):
),您將只附加array1
較大的元素,並忽略它們所在的任何對相等,或者array2
一個更大的else:
:。
您可能正在尋找類似numpy.maximum
的東西:
import numpy as np
array1 = np.array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
array2 = np.array([11, 1, 2, 4, 10, 60, 0, 3, 20, 33])
np.maximum(array1, array2)
# array([11, 2, 3, 4, 10, 60, 7, 8, 20, 33])
有幾件事:
首先,它繼續運行的原因是您沒有增加迭代器i
。
其次,目前您正在添加更大數字的索引,而不是更大的數字。 嘗試以下代碼(純python):
array3 = []
i = 0
while i < len(array1):
if array1[i] > array2[i]:
array3.append(array1[i])
else:
array3.append(array2[i])
i += 1
想通過列表理解來做到這一點。 假設 arrays 的大小始終相同,這將起作用。
[max([array1[i],array2[i]]) for i in range(len(array1))]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.