我对MATLAB完全不熟悉。这可能是一个相当基本的问题。
给定size
,extras
和max
的数值,我需要初始化1 XN向量,使得第一个size
元素为1,下一个{{ 1}}为2,下一个size
为3,依此类推,直到最后size
个元素设置为size
。因此,我需要将max
个元素连续初始化为size
,以使x
从1增加到x
。额外的是剩余单元的数量,初始化为0.举例说明:
max
所需的输出是
size = 3; %# (is same as the quotient of N/max)
extras = 1; %# (is same as remainder of N/max)
max = 3;
N = 10;
original_vector = [0 0 0 0 0 0 0 0 0 0];
答案 0 :(得分:1)
也许使用Kronecker产品:
N = 10;
max = 3;
extras = rem(N, max);
size = floor(N/max);
v = [kron([1 : max], ones(1,size)) zeros(1, extras)];
我猜测了额外物和大小的计算方法。你说大小是N%max,额外是N rem max,但那些是相同的东西(?)。
答案 1 :(得分:1)
一些重塑的杂技应该这样做:
>> size = 3; >> max = 3; >> N = 10; >> v = zeros(1, N); >> v(1:size*max) = reshape(cumsum(ones(max, size))', size*max, 1) v = 1 1 1 2 2 2 3 3 3 0
另一个例子:
>> size = 4; >> max = 5; >> N = 23; >> v(1:size*max) = reshape(cumsum(ones(max, size))', size*max, 1) v = Columns 1 through 18 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 Columns 19 through 23 5 5 0 0 0
答案 2 :(得分:0)
这是一个非常糟糕的实现,但正如你所说,你是MATLAB的新手,你可能会更好地了解如何或多或少地强行解决问题。这里的诀窍是在Vec上完成索引引用以放入数字。我忽略了参数extras而是填充向量,最好是元素
N = 23;
max = 3;
size = 4;
Vec = zeros(N,1);
for i=1:max
for j=1:size
Vec((i-1)*size +1 + (j-1)) = i;
end
end
Vec'
extra = sum(Vec==0)
输出: ans =
1 1 1 1 2 2 2 2 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0
extra =
11
答案 3 :(得分:0)
略微修改@b3的解决方案:
N = 10;
mx = 3;
sz = floor(N/mx);
v = zeros(1,N);
v(1:mx*sz) = repmat(1:mx,sz,1)