我的載體是[a(1) a(2) a(3) a(4) a(5) a(6) ... a(3k)]
。如何在MATLAB中將除了每個第三個元素都設置爲0?
我想要一個向量[0 0 a(3) 0 0 a(6) ... a(3k)]
。
什麼是短方式在MATLAB中做到這一點?
我的載體是[a(1) a(2) a(3) a(4) a(5) a(6) ... a(3k)]
。如何在MATLAB中將除了每個第三個元素都設置爲0?
我想要一個向量[0 0 a(3) 0 0 a(6) ... a(3k)]
。
什麼是短方式在MATLAB中做到這一點?
有很多方法可以做到這一點,一個是使用模屬性 - 因爲你每三個元素之後:
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,否則會變得凌亂
一個選項是使用indexing(在許多其他拉nguages)。這裏是一個新的變量的解決方案:
>>> 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
不存在一個在線解決方案的解決方案?否則,在Java中編寫for循環將需要的代碼少於此... – mercury0114
@ mercury0114這實際上是1行解決方案,我想還有其他1行。 – GameOfThrows
@ mercury0114你不需要它,檢查更新的答案,對不起,我正在爲另一個問題寫另一個答案 – GameOfThrows