从3D索引中提取矩阵列

时间:2017-11-29 07:15:22

标签: matlab matrix 3d

我尝试从一组给定的索引(在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。伙计们好吗?提前谢谢!

1 个答案:

答案 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);