我在mathematica中有一个值列表,例如num = {1,3,4,5}。如果元素大于某个数字,我如何通过它的倒数更改元素,否则用零替换。例如,如果一个数字大于2,那么我希望取数字的倒数,否则用零替换它。 num = {0,1 / 3,1 / 4,1 / 5}
答案 0 :(得分: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]:
的第二个策略
通过这种方式,首先我们应该告诉Mathematica我们的函数可以应用于列表:
SetAttributes[ReciprocalReplace, Listable]
现在我们可以在任何列表中应用我们的函数,它可以正常工作:
ReciprocalReplace[mylist]
再次返回:
{0,1,1/2,1/3,1/4,1/5}
答案 1 :(得分:1)
num= {1,3,4,5};
Cases[num, s_:> If[s>2, 1/s, 0], Infinity]
{0, 1/3, 1/4, 1/5}