MATLAB 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.

谢谢你的帮助!

最佳答案 您想要一个已经汇总的大小为[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);
点赞