1

在 MATLAB 中,我有一个非常大的矩阵(矩阵 A)。现在我想在第二列中找到包含某些值的行的行索引。这些值——我在矩阵 A 中寻找——存储在另一个矩阵(矩阵 B)中,由一行(800 个数字)组成。

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

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

问候,

感谢您及时的回复!确实,如果没有示例,这个问题可能有点复杂,并且确实重复的条目会导致一些问题。因此特此举个例子

例如,我有一个 -simplified- 矩阵 A:

1 2 3 4

9 9 9 9

4 3 2 1

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

和一个简化矩阵(行)C:[9 2]

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

所以,矩阵 D =

9 2

3 3

矩阵 E =

9 2

2 3

如本例所示,矩阵 B 和矩阵 C 可以包含存在于矩阵 A 的几列(如九列)中的数据。但是,矩阵 B 应该在矩阵 A 的第 2 列中“搜索”。同样,矩阵 C 应该在矩阵 A 的第 3 列中“搜索”,从而得到示例中给出的矩阵 D 和 E。

4

2 回答 2

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]
于 2013-02-05T13:53:07.560 回答
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

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

于 2013-02-05T13:59:11.883 回答