如何在MATLAB中将除第3个元素之外的所有元素设置为0?

时间:2016-11-28 11:29:46

标签: matlab

我的矢量是[a(1) a(2) a(3) a(4) a(5) a(6) ... a(3k)]

我想要一个向量[0 0 a(3) 0 0 a(6) ... a(3k)]

在MATLAB中做简短的方法是什么?

2 个答案:

答案 0 :(得分:4)

选项是使用indexing(在许多其他语言中切片)。这是一个带有新变量的解决方案:

>>> a = [1, 2, 3, 4, 5, 6]
a =

   1   2   3   4   5   6

>>> r = zeros(size(a))
r =

   0   0   0   0   0   0

>>> r(3:3:end) = a(3:3:end)
r =

   0   0   3   0   0   6

这是一个'到位'的解决方案

>>> a = [1, 2, 3, 4, 5, 6]
a =

   1   2   3   4   5   6

>>> a([1:3:end 2:3:end]) = 0
a =

   0   0   3   0   0   6

答案 1 :(得分:3)

有很多方法可以做到这一点,一个是使用modulo属性 - 因为你在每个第三个元素之后:

a = rand(1,3000); %Generate a random vector named a
inda = 1:size(a,2); %Generate the Index Vector of a

third = mod(inda,3) ==0; %Set every third element to 1 and everything else to 0
result = a.*third  %Vector element by element product

一行是:

result = a.*(mod(1:size(a,2),3) ==0); %change 3 to any Nth element you want.

另一种实用方法是重塑 - 但是这需要你的矢量长度为3 * N,否则会变得凌乱