考虑2个矩阵A,B,其中A是21x2矩阵,B是35x3矩阵
A = [ 1 2 ; B = [ 1 2 3 ;
1 3 ; 1 2 4 ;
1 4 ; .
. .
. .
. 5 6 7]
6 7 ]
我有矢量count_A
和count_B
:
count_A
是一个21 x 1
向量,对A
count_B
是35 x 1
向量。我需要浏览B
并找到比率count_B/count_A
,它会读取B
每行的前2个元素,并从count_A
调用相应的计数。我们还需要获取该行的count_B
值,并为B
中的每一行提供比率。
示例:
count_A = [ 2 ; count_B = [ 1 ;
3 ; 2 ;
. .
. .
. .
2 ] 3 ]
输出应如下:
第一行:count([1,2,3]) / count([1,2])
,1/2
第二行:count([1,2,4]) / count([1,2])
,2/2
= 1
。
...
第35行:count([5,6,7]) / count([5,6])
我的意思count([1,2,3])
count_B
是[1,2,3]
和count([1,2])
是count_A
对[1,2]
的回应。
有什么想法吗?
答案 0 :(得分:0)
你的问题不明确。以下是 title 要求的内容。
countA = sum(squeeze(all(bsxfun(@eq, B(:,1:2).', permute(A, [2 3 1])))));
countB = sum(squeeze(all(bsxfun(@eq, A.', permute(B(:,1:2), [2 3 1])))));
示例:
A = [ 1 2
1 3
1 4
6 7 ];
B = [ 1 2 3
1 2 4
1 3 5
5 6 7 ];
countA =
2 1 0 0
countB =
1 1 1 0
答案 1 :(得分:0)
我不完全确定你问的是什么,所以让我先从一些假设开始:
您的矩阵A
和B
分别有2个和3个元素。每行都是唯一的,因此例如[2, 3]
中最多只会出现A
一次。
当您说count([1, 2])
时,您的真正含义是count_A
中[1, 2]
与A
位于同一行的值A = [1 2; 1 3; 1 4; 6 7];
B = [1 2 3; 1 2 4; 1 3 5; 6 7 8];
count_A = [2 3 2 5]';
count_B = [1 2 3 4]';
ratio = zeros(size(count_B));
for Bidx = 1:size(B,1)
% See http://stackoverflow.com/questions/6209904/find-given-row-in-a-matrix
[~, Aidx] = ismember(B(Bidx, 1:2), A, 'rows');
if Aidx > 0 % ismember returns 0 if not found
ratio(Bidx) = count_A(Aidx) / count_B(Bidx);
end
end
ratio
。
您可以通过一些智能搜索技巧轻松完成此任务:
ratio =
2.0000
1.0000
1.0000
1.2500
现在,我的输出是
ismember
这是你要求的吗?
注意:我无法保证{{1}}的性能,因此如果您有非常多的行,这可能会非常慢。如果需要,可以测试小样本的正确性。
答案 2 :(得分:0)
检查此bsxfun
方法 -
A = [1 2; 1 3; 1 4; 6 7;5 6]
B = [1 2 3; 1 2 4; 1 3 5; 6 7 8;6 7 4; 6 7 7;5 6 7]
count_A = [2 3 2 5 2]';
count_B = [1 2 3 4 3 5 7]';
matches = bsxfun(@eq,A,permute(B(:,1:2),[3 2 1]))
[x1,y1] = find(reshape(all(matches,2),size(A,1),size(B,1)))
out = count_B./count_A(x1)
输出 -
out =
0.5000
1.0000
1.0000
0.8000
0.6000
1.0000
3.5000
希望这就是你所追求的。