给定三个正整数 x、y 和 z,使得 x>y。创建以下向量的最有效方法是什么:
1,2,3,..,x-y,x+1,x+2,x+3,..,2x-y,2x+1,2x+2,2x+3,..,3x-y,3x+1,...,..,zx+1,zx+2,zx+3,..,zx-y
给定三个正整数 x、y 和 z,使得 x>y。创建以下向量的最有效方法是什么:
1,2,3,..,x-y,x+1,x+2,x+3,..,2x-y,2x+1,2x+2,2x+3,..,3x-y,3x+1,...,..,zx+1,zx+2,zx+3,..,zx-y
这个问题可以看作是一个矩阵,您可以在其中添加(1:x-y)
到各个行和(0:z)*x)
各个列。这可以使用bsxfun有效地完成。要获得最终结果,您必须将矩阵展平为列向量(:)
并转置以获得所需的行向量:
>> x = 10; y = 7; z = 3;
>> vector = bsxfun(@plus, (1:(x-y)).', (0:z)*x);
>> vector = vector(:).'
vector =
1 2 3 11 12 13 21 22 23 31 32 33
使用矩阵乘法(列向量 x 行向量),另一种解决方案是:
x = 10; y = 7; z = 3;
a = (1:x-y).'*ones(1,x-y) + ones(x-y,1)*(0:x:x*(z-1));
a = a(:).';