MatLab中的矩阵转换
我在MatLab中有一个样本矩阵MatLab中的矩阵转换,matlab,vector,matrix,Matlab,Vector,Matrix,我在MatLab中有一个样本矩阵 >> A=[0 0 0 0; 5 1 4 6; 10 87 74 34] A = 0 0 0 0 5 1 4 6 10 87 74 34 我想创建一个新的向量,它包含a的元素,没有第一列。此外,每个元素(从第1行第2列开始)将仅放置在一列中。目标向量如下 newdata= 0 0 0 1
>> A=[0 0 0 0; 5 1 4 6; 10 87 74 34]
A =
0 0 0 0
5 1 4 6
10 87 74 34
我想创建一个新的向量,它包含a的元素,没有第一列。此外,每个元素(从第1行第2列开始)将仅放置在一列中。目标向量如下
newdata=
0
0
0
1
4
6
87
74
34
我创建了一个m文件
,支持它,但我得到的只是一个向量
newdata=
34
34
34
34
34
34
34
34
34
我的代码是
newdata=zeros(size(A,1)*(size(A,2)-1),1);
for ii=1:size(A,1)
for jj=2:size(A,2)
for n=1:(size(A,1)*(size(A,2)-1))
newdata(n)=A(ii,jj);
end
end
end
我知道这是件小事,但我找不到我的错误。
欢迎任何帮助 首先,您的错误是您将
n
编写为最里面的循环,这就是为什么newdata
会一次又一次地被每个元素覆盖(当然,第一列条目除外)。其次,这是一种效率极低的方式。您应该利用MATLAB的冒号
操作符。这可以通过以下方式完成:
A=A(:,2:end); %removing first column
A=A.';
newdata=A(:); %collapsing it to a vector and the transpose was done
%to get the desired format of the vector `newdata`. You are welcome to
%try the code without transpose and see what difference it makes.
你的主要“错误”是你试图重新发明轮子
第一步是去掉第一列
B=A(:,2:end)
最后一个是重塑矩阵:
B=重塑(B',1,[])”
不需要编写自己的代码。我认为这样做更容易。最简单的方法不是使用嵌套循环。Matlab有大量的内置功能,您应该尝试使用这些功能 试试这个:
newdata = A;
newdata(:,1) = []; %this will eliminate the first column of data
newdata = newdata'; %convert the matrix into its transpose in preparation for the next step
newdata = newdata(:); %automatically create the desired vector with this operator
正如@pivovarit所提到的,您只需使用
重塑
。但是,您可能还需要注意,由于MATLAB以列主形式存储数字,如果您实际上只想通过设置(例如C
)线性地访问数据,如下所示
C = A(:,2:end)'
您可以简单地将元素称为
C(1)
,C(2)
,C(6)
,等等,就像您对列向量所做的那样。谢谢您的欣赏。除了不是惯用的Matlab之外,代码中的错误是您对每对索引ii
和jj
执行n
-循环。也就是说,您为ii
和jj
的每次迭代填写所有newdata
。不要在n
上循环,你应该计算n
作为ii
和jj
的函数。因为a
是一个矩阵,使用length
不是很可靠。我建议使用size(A,2)
或干脆使用end
。因为A
是一个矩阵,所以使用长度
不是很可靠。我会推荐size(A,2)
或者干脆end
@DennisJaheruddin:是的;我的错误<代码>结束更好。谢谢。:)