在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.
答案 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
请注意,这假设始终只有一个条目匹配,否则您应该将结果定义为单元格数组而不是向量。