我的矢量是[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中做简短的方法是什么?
答案 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,否则会变得凌乱