在matlab中高效生成索引向量
给定三个正整数x,y和z,使得x>y。创建以下向量的最有效方法是什么:在matlab中高效生成索引向量,matlab,vector,vectorization,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 这个问题可以看作是一个矩阵,在这个矩阵中,您将(1:x-y)添加到各个行中,并将(0:z)*x)添加到各个列中。这可以使用。要获得最终结果,必须使用(:)将矩阵展平为列向量,并将其转置以获得所需的行向量: >> x = 10; 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)
添加到各个列中。这可以使用。要获得最终结果,必须使用(:)
将矩阵展平为列向量,并将其转置以获得所需的行向量:
>> 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
这个问题可以看作是一个矩阵,在这个矩阵中,您将
(1:x-y)
添加到各个行中,并将(0:z)*x)
添加到各个列中。这可以使用。要获得最终结果,必须使用(:)
将矩阵展平为列向量,并将其转置以获得所需的行向量:
>> 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(:).';
使用矩阵乘法(列向量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(:).';
你比我快了一分钟。同上,等于+1秒!很好用。。仅将
(0:z)
更改为(0:(z-1))
我想?我假设您示例的最后一位是zx+1,zx+2,zx+3,…,zx+x-y
,请注意额外的x
。正如您所写,最后一个值zx-y
小于zx+1
,这就是您想要的吗?@BasSwinckels+1但“
包含一个共轭体(我通常的诡辩)。为了将来的参考,我建议用“
”替换它,这样代码就可以处理复数了too@LuisMendo我知道,我知道,我总是很懒。但问题是正整数…你比我快了一分钟。同上,等于+1谢谢!很好用。。仅将(0:z)
更改为(0:(z-1))
我想?我假设您示例的最后一位是zx+1,zx+2,zx+3,…,zx+x-y
,请注意额外的x
。正如您所写,最后一个值zx-y
小于zx+1
,这就是您想要的吗?@BasSwinckels+1但“
包含一个共轭体(我通常的诡辩)。为了将来的参考,我建议用“
”替换它,这样代码就可以处理复数了too@LuisMendo我知道,我知道,我总是很懒。但问题是正整数…可能是@natan的重复。每个问题的答案可能与另一个相关,但这是一个完全不同的问题。因此,我建议将这个问题留待讨论。让我们同意不同意……可能重复@natan每个问题的答案可能与另一个问题相关,但这是一个完全不同的问题。因此,我建议将这个问题留待讨论。让我们同意不同意……失败原因:x=12;y=4;z=5
因以下原因失败:x=12;y=4;z=5