假設我有以下 NumPy 陣列:
x = np.array([0,1,2,3,4,5])
我想檢查數字是否按升序排列,即,如果存在大于之前數字的數字,它應該警告我。我相信我可以用any語法來做到這一點,但我不確定如何。例如,我一直在嘗試:
if any(x[i] < x[i-1] for i in range(len(x))):
print('Warning!')
但它不能正常作業。它應該激活陣列中的警告,例如[0,2,1,3,4,5],等等。有人可以幫我解決這個問題嗎?先感謝您!
uj5u.com熱心網友回復:
您可以使用np.diff并檢查它是否都是正面的。
>>> import numpy as np
>>> arr = np.array([0,1,2,3,4,5])
>>> np.diff(arr)
array([1, 1, 1, 1, 1])
>>> (np.diff(arr) >= 0).all()
True
或者
>>> arr = np.array([0,2,1,3,4,5])
>>> np.diff(arr)
array([ 2, -1, 2, 1, 1])
>>> (np.diff(arr) >= 0).all()
False
請注意,您也可以在此處使用any/ all,但您應該嘗試對 numpy 陣列使用 numpy 操作。但只是為了澄清,你基本上想要all(arr[i] <= arr[i 1] for i in range(len(arr) -1)).
請注意,我用“all”來表達事物,但您可以等效地使用“any”:
(np.diff(arr) < 0).any()
當然,any(arr[i] > arr[i 1] for i in range(len(arr) -1)).
最后,您必須決定如何處理沒有變化的情況,即當后續元素之間的差異為 0 時。由于您使用術語“升序”,通常,[1, 1, 2, 3]我按升序考慮,所以我使用了上面的約定(自最初發布以來已編輯))
uj5u.com熱心網友回復:
如前所述,您應該對 numpy 陣列使用 numpy 操作。但是,在這種微不足道的情況下,您可以這樣做:
import numpy as np
x = np.array([0,1,2,3,6,5])
for i in range(len(x)-1):
if x[i] > x[i 1]:
print('Not sorted')
break
else:
print('Sorted')
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/518413.html
下一篇:洗掉numpy陣列中的連續重復項
