簡體   English   中英

在 NumPy 中進行元素操作時,添加條件語句的最佳方法是什么?

[英]While doing element-wise operations in NumPy, what's the best way to add a conditional statement?

我有一個正整數列表,我想從所有元素中重復減去最小元素,但前提是該元素不是最小值的實例。 例如,在一次迭代中

a = np.array([3, 5, 9, 3, 3])變為[3, 2, 6, 3, 3]並最終變為[1,1,1,1,1]

也就是說,沒有條目會減少到 0。我懷疑可能存在一種簡單的方法來修改a - min(a)使得a[0]a[3]a[4]不會變成0,但我不知道。

我知道這可以通過列表理解來完成:

while len(set(arr)) > 1:

arr = [a - min(arr) if a > min(arr) else a for a in arr]

arrays 可能非常大,所以考慮到時間效率,我希望 NumPy 有一種方便的方法來做到這一點。 我對 Python 很陌生,因此感謝所有容量的更正/信息。

這可以使用where function 的 3 子句變體來處理:

>>> import numpy as np
>>> a = np.array([3, 5, 9, 3, 3])
>>> m = a.min()
>>> np.where(a != m, a - m, m)
array([3, 2, 6, 3, 3])

並將其包裝在 while 循環中。

除了使用set ,您還可以使用numpy.unique

while len(np.unique(a)) > 1:
    m = a.min()
    a = np.where(a != m, a - m, m)

但是您應該分別對兩種變體( setunique ,列表理解與where )進行計時,以查看對於較大的 arrays 最有效的方法。

另一個變體是比較最大值和最小值:也許a.max()可以比np.unique更快地計算:

while True:
    m = a.min()
    if m == a.max():
        break
    a = np.where(a != m, a - m, m)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM