【问题标题】:How to extract a vector from a large matrix by index in MATLAB?如何在MATLAB中按索引从大矩阵中提取向量?
【发布时间】:2013-11-18 19:20:09
【问题描述】:

我在 MATLAB 中被这个问题困扰了很久,希望在这里找到帮助!

我有一个非常大的矩阵,其中有 4 个向量(每个向量是一列)和 72300 行 .. 第一列/向量是数据的索引 .. 所以它是这样的:(示例已简化)

Index, Info1  Info2  Info3
1      2      1      1
1      4      5      3
1      2.5    1.3    8
2      1      4      7
2      4      6      9
2      12     3      7
3      2      6      6
3      2      1      4
3      1      4      7

Q1>如何从这个矩阵中提取所有索引==3 的 Info2?

Q2>有什么方法可以将矩阵重新排列成这样吗?

Index,   Info1,   Info2 Info3   Index   Info1   Info 2  Info 3
 1                              2

等等..

我希望能从你们那里得到一些帮助,并在此先感谢您..

亲切的问候,

【问题讨论】:

  • 不知道你在第二季度的要求是什么

标签: matlab vector matrix extract


【解决方案1】:

第一季度>> x = A(A(:1)==3,3); % Info2 for Index==3

第二季度>> B = reshape(A.',1,[]); %Flatten A along the rows

【讨论】:

    【解决方案2】:

    第一季度:

    对于您的问题 1,我使用一个简单的示例,因为我没有您的变量名称。

    idx = find( VectorName(:,1) == 3 ) % Find in all row at column 1 where = 3 (Index)
    

    在获得所有行的索引后 index == 3。所以提取 info2 值

    AllInfo2 = VectorName(idx,3); % Get all value where row == idx and column = 3 (Info2)
    

    【讨论】:

    • 不需要使用find,逻辑索引允许idx = VectorName(:,1) == 3
    • 是的,你是对的,它只是用来:) 我喜欢用find。我还在考虑第二季度。用于调整矩阵大小的最大计数唯一索引,但我不知道该怎么做。
    • 我会为你的第二个问题考虑一些事情。但请记住列索引上的函数uniquecount,这样您就可以根据这些数字创建一个新的矩阵 NxM。
    • @Leo:对于第 2 季度,假设数字数据与标题分开,您可以有一行数据由out = reshape(VectorName.',1,[]); 串起。这就是说 1 行,不管它需要多少列,读取数据。
    猜你喜欢
    • 1970-01-01
    • 2018-05-12
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    相关资源
    最近更新 更多