如何在Matlab中找到矩阵中一个向量元素的索引?

如何在Matlab中找到矩阵中一个向量元素的索引?,matlab,matrix,indexing,vectorization,Matlab,Matrix,Indexing,Vectorization,假设我有一个由整数组成的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 有没有想过要

假设我有一个由整数组成的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

有没有想过要加快速度


谢谢。

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

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

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

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

您的代码有一个bug,您正在覆盖
[StatIdxX StatIdxY]
每个循环迭代…@natan此循环实际上嵌套在另一个循环中,因此我需要覆盖[StatIdxX StatIdxY]。代码背后的总体思想是能够扩展一个实际的太阳能数据集,该数据集被布置在一平方英里的范围内。每个“太阳站”对应一个映射到a的ECEF坐标系。由于站代表地理区域内的点值,我可以使用knnsearch帮助我在网格中的任意点查找最近的邻居。然后我可以用这些点的平均值来填补空白。因此,我原来的45个站可以填充25x25的网格。您的代码有一个错误,您正在覆盖
[StatIdxX StatIdxY]
每个循环迭代…@natan此循环实际上嵌套在另一个循环中,所以覆盖[StatIdxX StatIdxY]是我需要做的。代码背后的总体思想是能够扩展一个实际的太阳能数据集,该数据集被布置在一平方英里的范围内。每个“太阳站”对应一个映射到a的ECEF坐标系。由于站代表地理区域内的点值,我可以使用knnsearch帮助我在网格中的任意点查找最近的邻居。然后我可以用这些点的平均值来填补空白。因此,我原来的45个电台可以填写一个25x25的网格。@Robocop:谢谢你的建议。这似乎比我的另一个循环好得多。@Robocop:谢谢你的建议。这似乎比我的另一个循环好得多。