用'NaN`替换向量的有条件给定部分?

时间:2013-01-26 23:25:57

标签: matlab

我想用[{1}}替换大于A的向量0.5的一部分。该向量的一部分在某个时间帧NaN之间定义。 x = ( t>=2 & t<5 )t的长度相同。

到目前为止,我提出了这个问题:

A

然而它不起作用!我尝试了各种各样的东西,但没有运气。

2 个答案:

答案 0 :(得分:2)

让我们一步一步来做。


第一步 - 构建条件

如果你这样做:

A > 0.5

您将获得A 1长度的A向量,0.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在某个位置会表示向量Columns 1 through 14 0 0 0 0 0 0 0 1 1 1 1 1 1 1 Column 15 0 中的特定元素位于区间 [2,5> 。矢量看起来像这样:

(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]) )

请注意,那些位于前两个向量的两个中的位置!


第二步 - 从向量

中提取元素

如果你这样做:

A

你会注意到只有第一个元素从向量0.1000 中提取出来,你得到:

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

您将使用以下内容提取前两个元素:

A

等等。

如果您希望更改向量3中某个元素的值,请将第一个和最后一个元素称为值A( logical([1 0 0 0 0 0 0 0 0 0 0 0 0 0 1]) ) = 3; ,您可以使用以下内容执行此操作:

A

结束(或TLDR)

NaN中提取所需的元素,并为其指定值A( (A > 0.5) & (t >= 2) & (t < 5) ) = NaN;

{{1}}

答案 1 :(得分: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