【发布时间】:2013-05-02 11:50:31
【问题描述】:
基本上我有这样的数组:
[1 2 3 4 5 6]
我想要这样的数组:
[1 0 2 0 3 0 4 0 5 0 6]
所以它是数组中的L-1 零,其中L 是填充零之前数组中所有值的数量。
有人知道如何在 Matlab 中解决它吗?
【问题讨论】:
标签: matlab
基本上我有这样的数组:
[1 2 3 4 5 6]
我想要这样的数组:
[1 0 2 0 3 0 4 0 5 0 6]
所以它是数组中的L-1 零,其中L 是填充零之前数组中所有值的数量。
有人知道如何在 Matlab 中解决它吗?
【问题讨论】:
标签: matlab
你可以试试这个:
a = [1 2 3 4 5 6];
b = zeros(1, 2 * length(a) - 1);
b(1:2:end) = a;
这会导致
b =
1 0 2 0 3 0 4 0 5 0 6
Dan 在 cmets 中建议了一个较短的版本:
b(1:2:2 * length(a) - 1) = a;
【讨论】:
b(1:2:2 * length(a) - 1) = a,让Matlab为你填零
b 已经存在,这可能会产生不需要的结果。
如果你有信号处理工具箱,你可以使用upsample函数:
>> x = 1:5;
>> upsample(x, 2)
ans =
1 0 2 0 3 0 4 0 5 0
【讨论】:
y = upsample(x, 2),你可以用y(end)=[]丢弃最后一个0
通过reshapeing:
a = [1 2 3 4 5 6];
b = a; % make copy
b(2,:) = 0; % add zeros
b = b(:)'; %'
b(end) = []; % discard last zero
【讨论】:
也许不是最优雅/最有效的解决方案,但以下应该可行:
x = 1:6;
y = zeros(1,2*length(x)-1);
for k=1:length(x)
y(2*k-1)=x(k);
end
阿诺
【讨论】:
另一种方法是:
a=1:6;
b=zeros(1,2*length(a)-1);
j=1;
for i=1:2:length(b)
b(i)=a(j);
j=j+1;
end
【讨论】:
for(int i=1;i<length(b);i+2) | Error: Unexpected MATLAB expression. 这甚至不是一个论点,你发布了 C 代码,你希望它如何在 Matlab 中运行?