使用matlab使用if操作将值从矩阵存储到另一个矩阵

时间:2016-02-20 20:23:51

标签: matlab if-statement for-loop

我有一个" x1"矩阵,我想提取一些关于逻辑条件的特定元素:

for z=1:length(x1)
  if (x1(z+1)-x1(z))>=20)
       extract=
  end
end

我如何获得"提取物"矩阵和这些值的索引在x1?

2 个答案:

答案 0 :(得分:0)

x1中元素的索引显然是z本身: z -th元素满足该条件。在extract我想你要放x1(z),这就是价值。但extract可能包含的元素少于x1,因此我们需要一个适当的索引来运行extract,我们称之为k

k=1
for z=1:length(x1)-1
  if (x1(z+1)-x1(z))>=20)
       extract(k)=x1(z); %if you want to extract the value
       k=k+1;
  end
end

或者,如果要保存x1的索引而不是值

k=1
for z=1:length(x1)-1
  if (x1(z+1)-x1(z))>=20)
       extract(k)=z;
       k=k+1;
  end
end

在此循环结束时,extract将是一个数组,其中包含满足条件的x1中元素的所有值(第一个循环)或索引(第二个循环)。

为了完整起见,为了获得两者,我们必须使用两个数组(extract表示值,indices表示索引):

k=1
for z=1:length(x1)-1
  if (x1(z+1)-x1(z))>=20)
       extract(k)=x1(z); % store the value
       indices(k)=z;     % store the index
       k=k+1;
  end
end

答案 1 :(得分:0)

您可以使用此代码提取索引

x1Diff = diff(x1)
x1DiffTh = zeros(size(x1Diff))
x1DiffTh[x1Diff>20] = 1
indx = find(x1DiffTh)

或在1行压缩

indx = find(diff(x1)>20)

For循环在Matlab中非常缺乏,因为代码没有编译。