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

我在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
        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:是的;我的错误<代码>结束更好。谢谢。:)