matlab:通过条件在数组上应用操作数

时间:2015-06-02 11:52:50

标签: matlab

我有一个这样的数组:

>> a = [2,34,5,6,7,0,1,10]

现在我想要反转这个数组的每个元素。 使用1 ./ a,结果为:

ans =

0.5000    0.0294    0.2000    0.1667    0.1429       Inf    1.0000    0.1000

Inf对我不好,答案应该是

ans =

0.5000    0.0294    0.2000    0.1667    0.1429       0    1.0000    0.1000

我想在非零的元素上应用它!

我该怎么做?

3 个答案:

答案 0 :(得分:4)

你可以有条件地做到:

nz = a ~= 0; %// select using logical indexing
a(nz) = 1./a(nz);

答案 1 :(得分:4)

您之后还可以将Inf值重置为零:

>> b=1./a

b =

0.5000    0.0294    0.2000    0.1667    0.1429       Inf    1.0000    0.1000

>> b(isinf(b)) = 0

b =

0.5000    0.0294    0.2000    0.1667    0.1429         0    1.0000    0.1000

答案 2 :(得分:1)

m.s.稍微更通用的方法是使用isfinite检查输出中的有限元素:

b = 1./a;
b( ~isfinite(b) ) = 0;

isfinite涵盖两个 inf值以及NaN值,因此如果您应用的逐元素函数可能会生成两种类型的非数值,isfinite可以同时处理它们。