2014-04-28 26 views
1

我有一個mathematica中的值列表,例如num = {1,3,4,5}。如果元素大於特定數字,我如何通過其倒數來更改元素,否則用零替換。例如,如果數字大於2,那麼我希望採用數字的倒數,否則將其替換爲零。 NUM = {0,1/3,1/4,1/5}當它大於某個值時,用其倒數替換numers

回答

2

比方說,我們的名單的定義如下:

mylist = {0, 1, 2, 3, 4, 5}; 

我們簡單地定義一個新的功能,你想要做什麼:

ReciprocalReplace[x_]:=If[ x!=0 , 1/x , 0 ] 

返回一個數字的反數,如果它非零並且返回'0'爲'0'。 現在,我們既可以使用Map[]申請名單上的功能或通過「的setAttribute」

使適用上列出了函數的第一個策略使用Map[]

Map[ReciprocalReplace, mylist] 

返回:

{0,1,1/2,1/3,1/4,1/5} 

我們也可以使用這種簡寫法,等效表示法:

ReciprocalReplace /@ mylist 

使用SetAttribute[function,Listable]: 這樣,首先我們應該告訴數學,可以在列表來應用這個我們的函數的第二個策略:

SetAttributes[ReciprocalReplace, Listable] 

現在,我們可以將任何名單上我們的功能和它會工作得很好:

ReciprocalReplace[mylist] 

是再次返回:

{0,1,1/2,1/3,1/4,1/5} 
1
num= {1,3,4,5}; 
Cases[num, s_:> If[s>2, 1/s, 0], Infinity] 

{0, 1/3, 1/4, 1/5} 
相關問題