我有一个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编码很新。任何帮助都非常感谢..
干杯
答案 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