Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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_Loops_Matrix - Fatal编程技术网

Matlab 提取序列矩阵元素?

Matlab 提取序列矩阵元素?,matlab,loops,matrix,Matlab,Loops,Matrix,我有一个矩阵,如下所示: A=[2 4;1 3;8 6;5 1;4 9] 现在我需要将矩阵A提取为两部分: newpoint=[2 4]; rest=[1 3;8 6;5 1;4 9]; 然后再次应用循环以提取第二列作为新点: newpoint=[1 3]; rest=[2 4;8 6;5 1;4 9]; newpoint=[8 6]; rest=[2 4;1 3;5 1;4 9]; 再次应用循环以将第三列编号作为新点: newpoint=[1 3]; rest=[2 4;8 6;5 1

我有一个矩阵,如下所示:

A=[2 4;1 3;8 6;5 1;4 9]
现在我需要将矩阵A提取为两部分:

newpoint=[2 4];
rest=[1 3;8 6;5 1;4 9];
然后再次应用循环以提取第二列作为新点:

newpoint=[1 3];
rest=[2 4;8 6;5 1;4 9];
newpoint=[8 6];
rest=[2 4;1 3;5 1;4 9];
再次应用循环以将第三列编号作为新点:

newpoint=[1 3];
rest=[2 4;8 6;5 1;4 9];
newpoint=[8 6];
rest=[2 4;1 3;5 1;4 9];

按行顺序取数字,直到最后一行。有人能帮忙吗?谢谢~

你说过要提取列,但给出了行的示例。我继续说下去,假设你是指争吵

你可以用for循环来完成

A = [2 4; 1 3; 8 6; 5 1; 4 9];

for idx = 1:size(A, 1)
    newpoint = A(idx, :);
    rest = A; % Copy A to rest
    rest(idx, :) = []; % Remove newpoint line
    % do stuff
end

前两次迭代的结果:

newpoint =

     2     4

rest =

     1     3
     8     6
     5     1
     4     9

newpoint =

     1     3

rest =

     2     4
     8     6
     5     1
     4     9
如果
a
矩阵很大,这不是一个好方法


编辑:事实上,不要使用此方法。George Aprilis对其进行计时,发现100000 x2矩阵的时间为123秒。我想我的电脑慢多了。花了216秒。我重复一遍,不要使用此选项。

您说过要提取列,但给出了行示例。我继续说下去,假设你是指争吵

你可以用for循环来完成

A = [2 4; 1 3; 8 6; 5 1; 4 9];

for idx = 1:size(A, 1)
    newpoint = A(idx, :);
    rest = A; % Copy A to rest
    rest(idx, :) = []; % Remove newpoint line
    % do stuff
end

前两次迭代的结果:

newpoint =

     2     4

rest =

     1     3
     8     6
     5     1
     4     9

newpoint =

     1     3

rest =

     2     4
     8     6
     5     1
     4     9
如果
a
矩阵很大,这不是一个好方法


编辑:事实上,不要使用此方法。George Aprilis对其进行计时,发现100000 x2矩阵的时间为123秒。我想我的电脑慢多了。花了216秒。我重复一遍,不要用这个。

除了HebeleHododo的答案,如果你有大矩阵,也许你可以试试这个:

A=[24;13;86;51;49];
B=零(大小(A,1)-1,大小(A,2));
对于idx=1:尺寸(A,1)
newpoint=A(idx,:);
B(1:idx-1,:)=A(1:idx-1,:);
B(idx:end,:)=A(idx+1:end,:);
%做事
结束
它没有摆脱for循环的
,但是临时B矩阵是预先分配的,并且A和B之间的副本是清晰的,这使得它更快

对于
A=rand(100000,2)
HebeleHododo的方法在我的计算机中大约需要123秒 上面的一个需要85秒


编辑:仅供参考,计时是使用
英特尔Core i5-3450 CPU@3.10GHz
Matlab R2011b
完成的。除了HebeleHododo的答案之外,如果你有大矩阵,也许你可以尝试以下方法:

A=[24;13;86;51;49];
B=零(大小(A,1)-1,大小(A,2));
对于idx=1:尺寸(A,1)
newpoint=A(idx,:);
B(1:idx-1,:)=A(1:idx-1,:);
B(idx:end,:)=A(idx+1:end,:);
%做事
结束
它没有摆脱
for循环的
,但是临时B矩阵是预先分配的,并且A和B之间的副本是清晰的,这使得它更快

对于
A=rand(100000,2)
HebeleHododo的方法在我的计算机中大约需要123秒 上面的一个需要85秒

编辑:仅供参考,使用
英特尔Core i5-3450 CPU@3.10GHz
Matlab R2011b