如何根据模式在MATLAB中初始化向量?

时间:2011-09-27 21:05:57

标签: matlab vector initialization

我对MATLAB完全不熟悉。这可能是一个相当基本的问题。

给定sizeextrasmax的数值,我需要初始化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];

4 个答案:

答案 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)