在matlab中有效地创建索引向量

Håk*_*and 1 matlab vector vectorization

给定三个正整数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
Run Code Online (Sandbox Code Playgroud)

Bas*_*els 5

此问题可以看作是一个矩阵,您可以在其中添加(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
Run Code Online (Sandbox Code Playgroud)