行番号と列番号の 2 つの大きな行列と、データの行列があります。私は行列を作成したい:
output(i,j) = data(row(i,j),col(i,j))
どうすればこれをすばやく行うことができますか?
Let [T, N] = size(Row)
、および let[DataT, DataN] = size(Data)
の場合、1 行のソリューションは次のとおりです。
Soln = reshape(Data(sub2ind([DataT DataN], Row(:), Col(:))), T, N);
このワンライナーは少し複雑に見えるので、例のケースで段階的に分解してみましょう。各セクションで何が起こっているかを示すコメントを含めました。
%# Set fixed parameters for example matrices
T = 3; N = 2;
DataT = 5; DataN = 4;
%# Generate random Data matrix
Data = rand(DataT, DataN);
%# Generate some random subscript index matrices for indexing Data
Row = randi(DataT, T, N);
Col = randi(DataN, T, N);
%# Obtain the linear indices implied by treating Row and Col as subscript matrices
L = sub2ind([DataT DataN], Row(:), Col(:));
%# Use the linear indices to get the data we want
Soln = Data(L);
%# Reshape the data from a vector into matrix of size T by N
Soln = reshape(Soln, T, N);
これらのタイプの問題を解決するための標準的なリファレンスは、Matrix-Indexing-in-MATLAB です。