我尝试从一组给定的索引(在3D中)中提取矩阵列(在2D中),而不将2D矩阵转换为3D以便有效地使用内存(我正在处理非常大的数据),我实现了这一点?我将为3D矩阵的每个切片重用2D矩阵,但我只是不知道该怎么做。示例代码:
A=rand(9,100); %The matrix that will be reused
B=randi([1 100],[1 100 30]); %the indices
Extracted=A(:,B); %this part I can't seem to solve it yet
Extracted
的预期输出为9x100x30
。伙计们好吗?提前谢谢!
答案 0 :(得分:2)
解决方案可以使用内联函数和arrayfun
:
A=rand(9,100); %The matrix that will be reused
B=randi([1 100],[1 100 30]); %the indices
func = @(x) A(x);
Extracted = arrayfun(func, B);
另一种解决方案是将3D矩阵B
转换为矢量。
然后使用您的方法检索Extracted
:
A=rand(9,100); %The matrix that will be reused
B=randi([1 100],[1 100 30]); %the indices
idx = reshape(B,1,numel(B));
Extracted = A(idx);