Matlab,如何在矩阵中获取每列

时间:2014-08-18 09:48:44

标签: matlab

我有一个4乘n矩阵,比如

A =

 1     5     9
 3     0     6
 2     3    10
 7     8     4

我想用A做的是将A的每一半列作为

Line1Point1 = [1 3]

Line1Point2 = [2 7]

Line2Point1 = [5 0]

Line2Point2 = [3 8]

Line3Point1 = [9 6]

Line3Point2 = [10 4]

我怎么能这样做?我对matlab编码很新。任何帮助都非常感谢..

干杯

5 个答案:

答案 0 :(得分:6)

使用重塑功能,例如:

>> A =  [1     5     9;
 3     0     6;
 2     3    10;
 7     8     4];
>> reshape(A,2,6)
ans =

     1     2     5     3     9    10
     3     7     0     8     6     4

答案 1 :(得分:2)

存储许多变量等信息通常是糟糕的想法

存储和访问的一些选项是

单元格数组

Line=mat2cell(A,[2,2],ones(1,size(A,2))).'

使用

进行访问
Line{2,1}
ans =

     5
     0

索引

作为其他答案

匿名函数

Line=@(l,p)A(2*p-1:2*p,l)

使用

进行访问
Line(2,1)

ans =

     5
     0

结构

不是真正有用的解决方案,更多是为了利益而

for ii=1:size(A,2);for jj=1:2;Line(ii).Point(jj).Value=A(2*jj-1:2*jj,ii);end;end

使用

进行访问
Line(2).Point(1).Value

ans =

     5
     0

答案 2 :(得分:1)

A(1:2,1)会给你第一列的前半部分。

A(3:4,1)会给你第一列的后半部分。

A(1:2,2)将为您提供第二列的前半部分。

A(3:4,2)会给你第二列的后半部分。

A(1:2,3)会给你第三列的前半部分。

A(3:4,3)会给你第三列的后半部分。

答案 3 :(得分:1)

我建议使用3D数组来存储然后访问这些值。

<强>代码

N = size(A,1)/2;
LinePoint = permute(reshape(A,N,size(A,1)/N,[]),[1 3 2])

在这里,

  • 2nd dimension indices (columns)代表Line IDs
  • 3rd dimension indices代表Point IDs

因此,代表性3D阵列将是 - LinePoint(:,LineID,PointID)

运行示例

对于您的A,我们将LinePoint作为 -

LinePoint(:,:,1) =
     1     5     9
     3     0     6
LinePoint(:,:,2) =
     2     3    10
     7     8     4

因此,

Line1Point1 would be denoted by LinePoint(:,1,1)
Line1Point2 would be denoted by LinePoint(:,1,2)

Line2Point1 would be denoted by LinePoint(:,2,1)
Line2Point2 would be denoted by LinePoint(:,2,2)

Line3Point1 would be denoted by LinePoint(:,3,1)
Line3Point2 would be denoted by LinePoint(:,3,2)

答案 4 :(得分:1)

您可以使用eval函数创建变量,该函数执行输入字符串。使用eval通常被认为是不好的做法,因为调试很糟糕。 不过,这是代码:

A = [1 5 9; 3 0 6; 2 3 10; 7 8 4];
for ii = 1:length(A(1,:))
    eval(['Line' num2str(ii) 'Point1 = A(1:2, ii)' ]); 
    eval(['Line' num2str(ii) 'Point2 = A(3:4, ii)' ]);
end
% Now all variables are created - for example: Line2Point1 

更优雅的解决方案是将矢量存储在单元阵列中。例如,您可以输入以下内容来访问第一个向量:c {1,1}

c = cell(length(A(1,:)),2)
for ii = 1:length(A(1,:))
    c{ii,1} = A(1:2, ii);
    c{ii,2} = A(3:4, ii);
end