操纵基质的特定区域

时间:2014-02-17 09:47:04

标签: matlab

我想在matlab中操作矩阵/查找表。这是我正在使用的Matrix:

0   5   10  15  20  25  30  35  40  45  50

0   3   4   5   6   4   5   5   5   5   5
20  3   4   5   6   4   5   5   5   5   5
27  3   4   5   6   4   5   5   5   5   5
34  3   4   5   6   4   5   5   5   5   5
41  3   4   5   6   4   5   5   5   5   5
49  3   4   5   6   4   5   5   5   5   5
56  3   4   5   6   4   5   5   5   5   5
63  3   4   5   6   4   5   5   5   5   5
71  3   4   5   6   4   5   5   5   5   5
78  3   4   5   6   4   5   5   5   5   5
85  3   4   5   6   4   5   5   5   5   5
93  3   4   5   6   4   5   5   5   5   5
100  3   4   5   6   4   5   5   5   5   5

我希望将第一列和第一行用作我的变量。所以,例如,如果我想操纵某个地区,我该怎么做?例如5 - 15(顶行)和20-41(第一列)之间的所有值乘以1.33。

理想情况下,我希望将其用于GUI,但我希望首先理解这个概念,因为我仍然是该软件的新用户。

感谢所有帮助,

亲切的问候,

山姆

3 个答案:

答案 0 :(得分:1)

使用logical index构建bsxfun以组合行和列条件(也可以使用repmat完成)。然后使用该索引将所需操作应用于所选条目。

A表示您的矩阵:

ind = bsxfun(@and, A(1,:)>=5 & A(1,:)<=15, A(:,1)>=20 & A(:,1)<=41);
A(ind) = A(ind)*1.33;

答案 1 :(得分:0)

您可能需要创建某种查找功能或数据结构。我会为你的“数据”矩阵分别创建第一行和第一列的两个向量,并使用find()函数查找相应的索引。

如果您知道要在矩阵中修改的值的索引,那么

A(3:6,2:4) = 1.33*A(3:6,2:4);

应该有效。

答案 2 :(得分:0)

在这种情况下,我实际上会使用2个索引,每个维度一个。

我假设您的数据在一个矩阵中,但是对于使用2个vectrices和矩阵的情况,不应该太难调整。

idx1 = A(1,:)>=5 & A(1,:)<=15;
idx2 = A(:,1)>=20 & A(:,1)<=41);

A(idx1,idx2) = A(idx1,idx2)*1.33