【问题标题】:Compare two matrices of unequal size比较两个大小不等的矩阵
【发布时间】:2018-02-08 12:43:29
【问题描述】:

我有两个矩阵 A(10,5) 和 B(30,5)。相比之下,所需的最终输出是大小为 (10,30) 或 (30,10) 的逻辑数组。 我的代码:

A=rand(10,5)
B=rand(30,5)
for i=1:size(A,1)
      X(:,i)=all(bsxfun(@le,A(i,:),B))
end

在我的代码中,就输出矩阵的大小而言,我没有得到想要的结果。

【问题讨论】:

  • 定义“期望的结果”,它与现在有何不同?如果您减少示例(例如 6×3 左右),您可以提供示例输入和输出,以便我们清楚地了解您想要实现的目标以及出错的地方。

标签: matlab logic comparison bsxfun boolean-algebra


【解决方案1】:

这是你想要的吗?

X = all(bsxfun(@le, permute(A, [1 3 2]), permute(B, [3 1 2])), 3);

使用上面的代码,如果A(m,:) 中的每个条目小于或等于B(n,:) 中的相应条目,则X(m,n) 将是true。

【讨论】:

  • 谢谢,请您解释一下置换 A、B 是如何协同工作的。
  • 我还有一个类似的问题。 A w.r.t. 中每一行的最小欧几里得距离将找到 B 中的所有行。如何使用 bsxfun 和 permute 来完成。输出将是列向量 X (10x1)。 X=min(bsxfun(@minus, permute(A, [1 3 2]), permute(B, [3 1 2])).^2, 3)。请提出修改建议。
  • @user9003011 我认为您只是在第三维上缺少sum 来计算距离;然后在第二个最小化。试试X = min(sum(bsxfun(@minus, permute(A, [1 3 2]), permute(B, [3 1 2])).^2, 3), [], 2)。或者,您可以使用X = min(pdist2(A, B), [], 2).^2
猜你喜欢
  • 2017-10-27
  • 2016-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-28
  • 2016-07-31
相关资源
最近更新 更多