【问题标题】:What is the quickest way to find and replace elements in a large matrix?在大型矩阵中查找和替换元素的最快方法是什么?
【发布时间】:2013-10-28 19:07:53
【问题描述】:

我想在大矩阵A 中查找和替换数字。向量BC 具有相同的维度并包含值。尽管A 可能包含非唯一值,但它具有B 的所有数字。我想在A 中搜索B 中的所有值,并将它们替换为C 中的相应值。

例如,令 A 为 2.5·106×4 矩阵。 BC 是 1.5·106×1 并且具有唯一值。我尝试使用以下 for 循环:

for q = 1:size(B, 1)
    A(A == B(q, 1)) = C(q, 1);
end

但是速度很慢。有没有更快的方法来做到这一点?

【问题讨论】:

  • 如果可以,请举个例子。
  • 这不是和this problem一样,这里BC是另一个问题中B的两列吗?

标签: matlab


【解决方案1】:

想到的最直接的解决方案是使用ismember

[tf, loc] = ismember(A, B);
A(tf) = C(loc(tf));

【讨论】:

  • 对我来说似乎也是正确的。注意tf 只是true(size(A))locA 的大小,所以答案更简单([~, loc] = ismember(A, B); A = C(loc);)。虽然我想我假设A 中的所有值都在B 中,所以这里可能有一个更通用的解决方案更好。请参阅my answer from a couple days ago 处理不同形状数据的相同问题。
  • 抱歉,我在翻东西。在这种情况下,您需要 tf。好点子。 +1
猜你喜欢
  • 2016-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 2020-10-17
  • 2016-02-06
  • 2017-03-13
  • 2020-06-27
相关资源
最近更新 更多