当数字大于某个值时,用它的倒数代替数字

时间:2014-04-28 13:35:02

标签: wolfram-mathematica

我在mathematica中有一个值列表,例如num = {1,3,4,5}。如果元素大于某个数字,我如何通过它的倒数更改元素,否则用零替换。例如,如果一个数字大于2,那么我希望取数字的倒数,否则用零替换它。 num = {0,1 / 3,1 / 4,1 / 5}

2 个答案:

答案 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}