首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MATLAB中选择一个指数矩阵的值?

在MATLAB中选择一个指数矩阵的值?
EN

Stack Overflow用户
提问于 2016-11-24 22:24:40
回答 3查看 192关注 0票数 0

在MATLAB中,我正在寻找一种有效的(和/或矢量化)方法来填充一个矩阵,方法是从多个给定“选择矩阵”的矩阵中进行选择。例如,给定三个源矩阵

代码语言:javascript
复制
M1 = [0.1, 0.2; 0.3, 0.4]
M2 = [1, 2; 3, 4]
M3 = [10, 20; 30, 40]

和一个指数矩阵

代码语言:javascript
复制
I = [1, 3; 1, 2]

我希望通过从M = [0.1, 20; 0.3, 4]中选择第一个条目、从M3中选择第二个条目来生成一个新的矩阵M3

我肯定可以在嵌套循环中完成,遍历每个条目并填充值,但我确信有一种更有效的方法。

如果M1M2M3M都是3D矩阵(RGB图像)怎么办?I的每个条目都告诉我们应该从哪个矩阵中取一个3向量。比如说,如果是I(1, 3) = 3,那么我们知道由(1, 3, :) of M索引的条目应该是M3(1, 3, :)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-11-25 14:56:16

一种不改变变量存储方式的方法是使用掩码。如果您有几个矩阵,它就是在做避免for循环的工作。如果不使用cat函数或使用单元格,就无法完全向量化。

代码语言:javascript
复制
M = zeros(size(M1));

Itmp = repmat(I==1,[1 1 size(M1,3)]); M(Itmp) = M1(Itmp);
Itmp = repmat(I==2,[1 1 size(M1,3)]); M(Itmp) = M2(Itmp);
Itmp = repmat(I==3,[1 1 size(M1,3)]); M(Itmp) = M3(Itmp);
票数 0
EN

Stack Overflow用户

发布于 2016-11-24 23:07:32

这样做的一种方法是用你的图像生成一个四维矩阵。它有增加内存的成本,或者至少改变你的内存方案。

代码语言:javascript
复制
Mcat = cat(4, M1, M2, M3);

然后,您可以使用函数sub2ind获得一个矢量化矩阵创建。

代码语言:javascript
复制
% get the index for the basic Image matrix
I = repmat(I,[1 1 3]); % repeat the index for for RGB images
Itmp = sub2ind(size(I),reshape(1:numel(I),size(I)));

% update so that indices reach the I(x) value element on the 4th dim of Mcat.
Itmp = Itmp + (I-1)*numel(I);

% get the matrix
M = Mcat(Itmp);

我还没有对它进行正确的测试,但它应该能用。

票数 0
EN

Stack Overflow用户

发布于 2016-11-24 23:11:34

我认为处理这个问题的最好方法是堆叠维度(即有一个矩阵,其值是每个缩进矩阵的值)。不幸的是,MATLAB并不真正支持数组级索引,因此最终发生的是使用线性索引来通过subs2ind命令转换值。我相信你可以使用下面的代码。

代码语言:javascript
复制
M1 = [0.1, 0.2; 0.3, 0.4]
M2 = [1, 2; 3, 4]
M3 = [10, 20; 30, 40]



metamatrix=cat(3,M1,M2,M3)
%Create a 3 dimenssional or however many dimension matrix by concatenating
%lower order matricies

I=[1,1,1;1,2,3;2,1,1;2,2,2]

M=reshape(metamatrix(sub2ind(size(metamatrix),I(:,1),I(:,2),I(:,3))),size(metamatrix(:,:,1)))

对于更复杂的(三维情况),您必须将代码扩展到更高的维度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40795254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档