[英]Formatting an array of float values in Numpy Python
function values[(values<=0).argmin():] = 0
如果在Int array
output 中看到的數字小於 0,則從第 n 個元素到最后一個元素的值變為零。 然而,當數組元素是浮點數時,arrays 會自動轉換為float array
output 中的零。 我怎樣才能解決這個問題?
浮點數組
Numbers = np.array([123.6 , 123.6 , 123.6, 110.3748 , 111.6992976, 102.3165566, 97.81462811])
Numbers[(Numbers>=-50).argmin():] = 0
Output
[ 10 3 -20 0 0 0]
整數數組
import numpy as np
values = np.array([123 , 123 , -123.6, 110, 111])
values[(values<=0).argmin():] = 0
Output:
[123 , 123 , 0, 0, 0]
嘗試這兩種方法,一種是對 NumPy 視圖的就地分配,另一種是創建一個新數組以分配給另一個變量 -
#Method 1 (Inplace assignment)
Numbers[(Numbers<=0).cumsum(dtype=bool)] = 0
#OR
#Method 2 (Not inplace)
np.where(~(Numbers<=0).cumsum(dtype=bool), Numbers, 0)
解釋 -
返回[F, F, F, T, F, F, F]
的bool數組可以看成一個1和0的數組。 執行 cumsum 最終會將第一個 T 傳播到后續元素。
因此,這會將數組轉換為[F, F, F, T, T, T, T]
,現在可以僅使用boolean indexing
並將視圖設置為 0 或np.where
以獲取原始元素或 0 基於用~
反轉 boolean
這里的好處是,如果你的數組只是由 False 組成,這意味着沒有元素滿足條件,它只會返回原始Numbers
本身,而不是將它們設置為 0。
運行測試 -
Numbers = np.array([123.6 , 123.6 , -123.6, 110.3748 , 111.6992976, 102.3165566, 97.81462811])
Numbers[(Numbers<=0).cumsum(dtype=bool)] = 0
#array([123.6, 123.6, 0. , 0. , 0. , 0. , 0. ])
Numbers = np.array([123.6 , 123.6 , 123.6, 110.3748 , 111.6992976, 102.3165566, 97.81462811])
Numbers[(Numbers<=0).cumsum(dtype=bool)] = 0
#array([123.6 , 123.6 , 123.6 , 110.3748 ,111.6992976 , 102.3165566 , 97.81462811])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.