【问题标题】:How to get selective rows from a matrix and form a new matrix in octave?如何从矩阵中获取选择性行并以八度音阶形成新矩阵?
【发布时间】:2014-08-03 16:07:42
【问题描述】:

假设我有一个八度音阶的矩阵

A = [2 3 5;
     5 6 7; 
     8 9 10;
     1 2 5]

现在我只想获取最后一列等于 5 的行。我想知道是否有内置函数,因为现在正在这样做。

collection = [];
for i = 1 : size(matrix,1),
    if(matrix(i,3) == 5),
        collection = [collection; matrix(i,:)];
    end
end

如果单列矩阵有这样的方法就好了。

【问题讨论】:

    标签: matlab matrix octave


    【解决方案1】:

    例如,您可以在最后一列上使用逻辑索引来做到这一点

    A(:,end) == 5
    

    返回一个逻辑矩阵,它对你想要的行为真,否则为假。我们可以使用它来选择这样的行

    ind = A(:,end) == 5;
    A(ind,:); 
    

    你甚至可以直接内联:

    A(A(:,end)==5,:)
    

    【讨论】:

    • 这比我写的代码快吧?不知何故,我无法打勾;托克;以八度音阶工作:(
    • 你试过tictoc吗?离开k。我想如果你有一个大矩阵,这会快很多。
    • 我太愚蠢了,我忘了它没有 k :( 我写的内容为 0.001,您的快捷方式为 0.005。我尝试使用我在问题中发布的矩阵..
    • 你是对的!对于更大的矩阵,我的代码需要 0.066 秒,而你的需要 0 秒。我想知道为什么它说 0 秒:|
    • @Aditya 可能只是一个数字格式化的东西。尝试先在命令行中输入format long g,然后运行它(虽然可能只是 Matlab,但可能直接转换为 Octave)
    猜你喜欢
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 2022-08-15
    • 2016-10-09
    • 1970-01-01
    • 2021-09-16
    • 2016-08-06
    相关资源
    最近更新 更多