【问题标题】:Matrix conversion in MatLabMatLab 中的矩阵转换
【发布时间】:2013-05-22 11:38:32
【问题描述】:

我在 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-file 它应该这样做,但我得到的只是一个向量

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

我知道这是微不足道的事情,但我找不到我的错误。 非常欢迎任何帮助!

【问题讨论】:

  • 除了不是惯用的 Matlab 之外,您的代码中的错误是您为每对索引 ii 和 jj 执行 n-循环。 IE。您为ii 和jj 的每次迭代填写所有newdata。而不是循环遍历n,您应该计算n 作为ii 和jj 的函数。

标签: matlab vector matrix


【解决方案1】:

首先,您的错误是您将n 写为最内层循环,这就是为什么newdata 对于每个元素一次又一次地被覆盖(当然,除了第一列条目)。其次,这是一种效率极低的方式。您应该利用 MATLAB 的 colon 运算符。这可以按如下方式完成:

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. 

【讨论】:

  • 感谢您的赞赏。
【解决方案2】:

您的主要“错误”是您试图重新发明轮子。

第一步是去掉第一列。

B = A(:,2:end)

最后一个是重塑矩阵:

B = reshape(B.',1,[])'

无需编写自己的代码。我认为这样更容易。

【讨论】:

  • 由于A 是一个矩阵,因此使用length 不是很健壮。我会推荐size(A,2) 或简单的end。
【解决方案3】:

最简单的方法不是使用嵌套循环。 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

【讨论】:

    【解决方案4】:

    正如@pivovarit 所述,您可以简单地使用reshape。但是,您可能还需要注意,由于 MATLAB 以列主要形式存储数字,如果您实际上想简单地线性访问数据,请设置 C,例如

    C = A(:,2:end)'
    

    您可以简单地将元素称为C(1)、C(2)、C(6) 等,就像您对列向量所做的那样。

    【讨论】:

    • 由于A 是一个矩阵,因此使用length 不是很健壮。我会推荐size(A,2) 或简单的end。
    • @DennisJaheruddin:是的;我的错。 end 好多了。谢谢。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多