MATLAB搜索矩阵的行索引与另一个矩阵的值

时间:2013-02-05 12:17:09

标签: matlab search indexing row

在MATLAB中,我有一个非常大的矩阵(矩阵A)。现在我想找到行的行索引,其中包含 second 列中的某些值。这些值 - 我在矩阵A中寻找 - 存储在一个矩阵(矩阵B)中,其中包含一行(800个数字)。

此外,我想重新计算相同矩阵A的计算,但是对于十个不同的矩阵,具有不同的大小(其中包含我在矩阵A的不同列中寻找的值) 。

由于矩阵的大小,我认为我需要一个循环来提取矩阵A中的行,其中包含矩阵B的te值。我该怎么做?

的问候,

V

感谢您的快速反应!实际上,如果没有示例,问题可能有点复杂,实际上重复的条目会导致一些问题。因此举一个例子

例如,我有一个-simplified-matrix A:

1 2 3 4

9 9 9 9

4 3 2 1

和 - 简化矩阵(行)B:[9 3]

a -simplified-matrix(row)C:[9 2]

然后我想得到矩阵D和矩阵E.这些矩阵应该在第一列中包含原始矩阵D(或E)中的数字,在第二列中包含矩阵A中该值的相应行位置。

所以,矩阵D =

9 2

3 3

矩阵E =

9 2

2 3

如该示例所示,矩阵B和矩阵C可以包含存在于矩阵A的若干列中的数据(如9)。但是,martix B应该在矩阵A的第2列中“搜索”。同样,矩阵C应该在矩阵A的第3列中“搜索”,从而产生如示例中给出的矩阵D和E.

2 个答案:

答案 0 :(得分:0)

正如Shai在评论中提到的那样,你的问题很模糊,可能会出现很多特殊情况(重复的条目,A和B的相对大小等)。但总的来说,我尝试了一小段似乎可以做你想要的代码。肯定有更快的方法,当然有关你的问题的更多信息可以帮助优化这一点。

colA=2;
% Example
nmax=10;
nA=5;
A=randi(nmax,[nA nA]);
nB=3;
B=randi(nmax,[1 nB]);
% Find rows
rows=cell(size(B));
for i=1:numel(B)
    rows(i)={find(A(:,colA)==B(i))};
end

输入/输出是:

A =
     3     7     8     5     4
     9     7     3     7     5
     8     2     9     9     8
     9     5     9     7     9
     3     3     4     6     8

B =
     1     7     5

rows =
     [0x1 double]    [1;2]    [4]

答案 1 :(得分:0)

假设您有两个向量,largeDataIndex(矩阵的第二列)和interestingIndex(您的b),您需要以下内容:

For each value of interestingIndex , find the position in largeDataIndex 

然后一个简单的方法就是:

result = zeros(size(interestingIndex))
for i = 1:length(result)
    result(i) = find(interestingIndex(i) == largeDataIndex)
end

请注意,这假设始终只有一个条目匹配,否则您应该将结果定义为单元格数组而不是向量。