簡體   English   中英

在 Numpy Python 中格式化浮點值數組

[英]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)

解釋 -

  1. 返回[F, F, F, T, F, F, F]的bool數組可以看成一個1和0的數組。 執行 cumsum 最終會將第一個 T 傳播到后續元素。

  2. 因此,這會將數組轉換為[F, F, F, T, T, T, T] ,現在可以僅使用boolean indexing並將視圖設置為 0 或np.where以獲取原始元素或 0 基於用~反轉 boolean

  3. 這里的好處是,如果你的數組只是由 False 組成,這意味着沒有元素滿足條件,它只會返回原始Numbers本身,而不是將它們設置為 0。


運行測試 -

  1. 具有滿足條件的值
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. ])
  1. 沒有符合條件的值
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.

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