我有很多元素非常小的一個大矩陣,而我認爲這些元素爲0。在數學,有一個叫Chop
功能:python是否在Mathematica中具有類似於「Chop」的功能?
Chop[expr]
在expr
是接近 替代近似實數通過精確的整數零0詳細
Chop[expr,delta]
內容替換數字在絕對值比小減去0.Chop
使用默認公差10 -10。
因此我想問一下在Python中是否有這樣的函數。
我有很多元素非常小的一個大矩陣,而我認爲這些元素爲0。在數學,有一個叫Chop
功能:python是否在Mathematica中具有類似於「Chop」的功能?
Chop[expr]
在expr
是接近 替代近似實數通過精確的整數零0詳細
Chop[expr,delta]
內容替換數字在絕對值比小減去0.Chop
使用默認公差10 -10。
因此我想問一下在Python中是否有這樣的函數。
有這個沒有內置的功能,但你可以很容易地創建一個自己:
def chop(expr, *, max=0.3):
return [i if i > max else 0 for i in expr]
調用,這將小於或等於所有的數字轉換成0.3
爲0
:
>>> chop([1.0, 0.2, 0.4, 0.3, 0.31])
[1.0, 0, 0.4, 0, 0.31]
您應該將默認值max
更改爲更適合您的需求的東西,但您也可以隨時單獨更改個別呼叫:
>>> chop([0.2, 0.3, 0.4], max=0.25)
[0, 0.3, 0.4]
>>> chop([0.3, 1, 2, 3], max=2)
[0, 0, 0, 3]
如果你願意,你也可以轉換負數!無論是使用從零相同的距離爲正數和負數:
def chop(expr, *, max=0.3):
return [i if abs(i) > max else 0 for i in expr]
,或者使用兩個不同的限制:
def chop(expr, *, max=0.3, min=-0.3):
if max < min:
raise ValueError
return [
i if i > max or i < min else 0
for i in expr
]
你的功能正好相反,它們取代了0個遠離零的元素。此外,它們用於標量值,而OP則要求提供將矩陣作爲輸入的函數。 – arekolek
一種方式來做到這一點與numpy的是使用一個屏蔽數組:
>>> import numpy
>>> def chop(expr, delta=10**-10):
... return numpy.ma.masked_inside(expr, -delta, delta).filled(0)
>>> x = numpy.fft.irfft(numpy.fft.rfft([2, 1, 1, 0, 0, 0]))
>>> x
array([ 2.00000000e+00, 1.00000000e+00, 1.00000000e+00,
3.20493781e-17, -4.44089210e-16, -3.20493781e-17])
>>> chop(x)
array([ 2., 1., 1., 0., 0., 0.])
如果你真的不想使用numpy的出於某種原因,那麼這裏就是對於標量值,列表和多維表(矩陣)工作的函數:
def chop(expr, delta=10**-10):
if isinstance(expr, (int, float, complex)):
return 0 if -delta <= expr <= delta else expr
else:
return [chop(x) for x in expr]
[使用numpy已經有一個很好的答案](http://stackoverflow.com/a/14419318/2505645),但OP從未提及他使用numpy,所以你不應該指望他。如果事後證明他是,那麼這是一個重複的問題,應該關閉。 –
幫助頁面聲稱「每當你遇到一個非常草率的,沒有付出努力的帖子,或者一個明顯而且可能危險不正確的答案時,使用你的低估。」我想知道哪一個適用於這個答案。 – arekolek
@arekolek懸停在downvote按鈕上時的工具提示顯示「此答案無用」。如果馬庫斯或其他人認爲這個答案沒有用,他們可以自由下注。 – NobodyNada
的[設定非常低的值在零numpy的]可能的複製(http://stackoverflow.com/questions/14419290/set-very-low-values-to-zero-in-numpy) – Julien
@Julien不過,你不知道海報是否使用numpy。 – pvg
@pvg問題是關於Python中的一個大矩陣。除非有很好的理由,否則標準建議是使用numpy。 –