【问题标题】:How do I find the indices of the elements of one vector in a matrix in Matlab?如何在 Matlab 的矩阵中找到一个向量的元素的索引?
【发布时间】:2013-05-31 21:14:41
【问题描述】:

假设我有一个由整数组成的 9x9 矩阵 A。我有另一个矩阵 IDX,它是 2500x4,由 A 中的相同整数组成。我想在矩阵 A 中找到 IDX 中所有值的索引。

这是我所拥有的:

for ii=1:length(IDX)
     Mat_idx=ismember(A,IDX(ii,:));
     [StatIdxX StatIdxY] = find(Mat_idx);
end

现在对于每个 ii,StatIdxX 和 StatIdxY 是矩阵 A 中 IDX 的行和列索引。这很慢,罪魁祸首是ismember

对加快速度有什么想法吗?

谢谢。

【问题讨论】:

  • 您的代码有错误,您正在覆盖[StatIdxX StatIdxY] 每次循环迭代...
  • @natan 这个循环实际上嵌套在另一个循环中,所以覆盖 [StatIdxX StatIdxY] 是我需要做的。代码背后的总体思路是能够扩展一个一平方英里的真实太阳能数据集。每个“太阳能站”对应一个映射到 A 的 ECEF 坐标系。由于站代表地理区域内的点值,我可以使用 knnsearch 帮助我在网格中的任意点找到最近的邻居。然后我可以取这些点的平均值来填补空白。因此,我原来的 45 个站点可以填充 25x25 的网格。

标签: matlab matrix indexing vectorization


【解决方案1】:

首先将AA=A(:) 展平,这将生成单个线性索引而不是行列。 然后只需使用逻辑索引。例如:

B=zeros(size(IDX));
for n=1:numel(A)
B(IDX==A(n))=n;
end

【讨论】:

  • @Robocop:感谢您的建议。这似乎比我的其他循环好得多。
猜你喜欢
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
  • 1970-01-01
  • 2015-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-13
相关资源
最近更新 更多