numpy.delete有沒有辦法使用滿足某些條件(例如該資料型別的條件)的布爾掩碼(或任何其他函式)洗掉陣列中的特定元素?,這是通過使用numpy方法。
例如:
import numpy as np
arr = np.random.chisquare(6, 10)
array([4.61518458, 4.80728541, 4.59749491, 3.44053946, 5.52507358,
7.97092747, 2.01946678, 6.26877508, 3.68286537, 2.06759469])`
現在出于測驗目的,我想知道是否可以使用一些numpy函式來洗掉所有可被給定值整除的元素k
>>> np.delete(arr, 1, 0)
[4.61518458 4.59749491 3.44053946 5.52507358 7.97092747 2.01946678
6.26877508 3.68286537 2.06759469]
該delete(arr, 1, 0)呼叫僅洗掉該位置的值,有沒有辦法根據匿名函式lambda或我上面提到的條件洗掉多個值?
uj5u.com熱心網友回復:
是的,這是 numpy 的魔法索引的一部分。您可以使用比較運算子或apply函式來生成一個布爾陣列,其中 True 用于保留,False 用于折騰。因此,例如,保持所有元素小于 5::
selections = array < 5
array = array[selections]
那只會保留selections為真的元素。
當然,由于您的所有值都是浮點數,它們不會被整數整除k,但那是另一回事了。
uj5u.com熱心網友回復:
為了進行這樣的劃分,基于Tim的回答:
k = 6 # a number
array = array[array % k == 0]
uj5u.com熱心網友回復:
整數
如果您正在查看整數除法,@Ali_Sh 的答案將起作用:
>>> x = np.array([3, 5, 6, 7, 9, 0])
>>> x[x%2==0]
array([6, 0])
或者,消除它們
>>> x[x%2!=0]
array([3, 4, 7, 9])
花車
如果你有浮點數,看起來像你那樣,那么數字問題可能會使它更具挑戰性
>>> k = 1.0000002300000000450001000101
>>> x = np.array([k * i for i in range(1,10)] [0.5,])
>>> x
array([1.00000023, 2.00000046, 3.00000069, 4.00000092, 5.00000115,
6.00000138, 7.00000161, 8.00000184, 9.00000207, 0.5])
>>> x[x%k==0]
array([1.00000023, 2.00000046, 3.00000069, 4.00000092, 6.00000138,
8.00000184])
我們錯過了一些我們希望被抓住的東西(5.000...和6.000...)9.000...。如果我們查看模除法本身,我們會看到一些遺漏的數字幾乎為零( ((7*k)%k/k)=4.44089108e-16),而其他數字幾乎等于k( ((5*k)%k/k)=1.00000000e 00):
>>> (x % k)/k
array([0.00000000e 00, 0.00000000e 00, 0.00000000e 00, 0.00000000e 00,
1.00000000e 00, 0.00000000e 00, 4.44089108e-16, 0.00000000e 00,
1.00000000e 00, 4.99999885e-01])
所以解決方案是不僅要尋找零的情況,還要尋找幾乎0和幾乎的情況k。為此,您需要定義一些容差水平(我delta=10**-10在下面使用),然后找到足夠接近的值。
>>> delta = 10**-10
>>> x[np.logical_or((x % k) <= delta, (k - (x % k)) <= delta)]
array([1.00000023, 2.00000046, 3.00000069, 4.00000092, 5.00000115,
6.00000138, 7.00000161, 8.00000184, 9.00000207])
在您的情況下,您希望消除它們,因此您需要:
>>> x[np.logical_and((x % k) >= delta, (k - (x % k)) >= delta)]
array([0.5])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/441333.html
