1

我想用A大于0.5的部分替换我的向量NaN。这个向量的一部分是在某个时间范围内定义的x = ( t>=2 & t<5 )t并且A具有相同的长度。

到目前为止,我想出了这个:

A = [0.1 0.4 0.3 1 0.6 3 0.3 0.4 0.6 0.8 0.4 0.8 0.9 0.2 1];
t = [1 1 1 1 1 1 1 2 2 2 3 3 3 4 5];
x = (t >= 2 & t < 5);

if A(x) > 0.5
    A = nan;
end

然而它不起作用!我尝试了各种事情,但没有运气。

4

2 回答 2

2

让我们一步一步来。


第一步——构造条件

如果你这样做:

A > 0.5

您将在大于的元素位置上获得长度为Awith的向量,即:1A0.5

Columns 1 through 14

0     0     0     1     1     1     0     0     1     1     0     1     1     0

Column 15

1

如果你这样做:

t >= 2 & t < 5

你会得到与上面类似的向量(相同的长度),但这次1在某个位置上将表示向量t中的特定元素在区间[ 2, 5 >中。矢量看起来像这样:

Columns 1 through 14

0     0     0     0     0     0     0     1     1     1     1     1     1     1

Column 15

0

您可以通过要求满足两个条件来组合这两个向量:

(A > 0.5) & (t >= 2) & (t < 5)

你得到向量:

Columns 1 through 14

0     0     0     0     0     0     0     0     1     1     0     1     1     0

Column 15

0

请注意,一个在前两个向量中都有一个的位置上!


第二步——从向量中提取元素

如果你这样做:

A( logical([1 0 0 0 0 0 0 0 0 0 0 0 0 0 0]) )

你会注意到只有第一个元素是从 vector 中提取的A,你会得到:

0.1000

您将提取前两个元素:

A( logical([1 1 0 0 0 0 0 0 0 0 0 0 0 0 0]) )

等等。

如果您希望更改 vector 中某个元素的值A,例如将第一个和最后一个元素设置为 value 3,您可以使用以下方法:

A( logical([1 0 0 0 0 0 0 0 0 0 0 0 0 0 1]) ) = 3;

总结(或 TLDR)

从 中提取所需元素A并为其分配值NaN

A( (A > 0.5) & (t >= 2) & (t < 5) ) = NaN;
于 2013-01-27T01:15:12.180 回答
0

鉴于:

A=[0.1 0.4 0.3 1 0.6 3 0.3 0.4 0.6 0.8 0.4 0.8 0.9 0.2 1];
t = [1 1 1 1 1 1 1 2 2 2 3 3 3 4 5];
x=(t>=2 & t<5);

您可以简单地执行以下操作:

A (A > 0.5) = NaN;

在 GNU Octave 中,我最终得到以下输出:

octave:6> disp(A)
0.10000   0.40000   0.30000   1.00000   0.60000   3.00000   0.30000   0.40000   0.60000   0.80000   0.40000   0.80000   0.90000   0.20000   1.00000
于 2013-01-26T23:34:50.440 回答