Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在matlab中高效生成索引向量_Matlab_Vector_Vectorization - Fatal编程技术网

在matlab中高效生成索引向量

在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

给定三个正整数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 = 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