MATLAB bsxfun具有不同的非单例维度

时间:2015-08-02 11:40:34

标签: matlab histogram vectorization intersection bsxfun

我有两组(50列火车和25个测试)大小为42的直方图。(这些数字是任意的,实际上它们会更大,所以我正在寻找一种有效的方法。在转置方面是反向的,所以随意使用任何约定[特征x观察]或[观察x特征])

因此x1的大小为[42, 50]x2的大小为[42, 25]。我想计算大小为[50, 25]的直方图交集核。直方图交集核心是指包含两个直方图的最小元素的向量之和。我怎么能用MATLAB做到这一点?

我尝试k=sum(bsxfun(@min, x1,x2));(使用转置版本),但我收到了错误:

Error using bsxfun
Non-singleton dimensions of the two input arrays must match each other.

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

您想要一个已经汇总的大小为[50,25]的输出。 bsxfun的输出应为维度[50,25,42],这意味着除单个维度外,所有输入必须为此大小。您的[42, 50]需要置换为[50,1,42],第二个输入需要[1,25,42]

x1=rand(42,50);
x2=rand(42,25);
x1=permute(x1,[2,3,1]);
x2=permute(x2,[3,2,1]);
t=bsxfun(@min, x1,x2);
k=sum(t,3);