MATLAB用另一个矩阵替换矩阵的某些值

时间:2017-09-07 22:56:04

标签: matlab

我有一个任意矩阵a = [1, 0, 0, 1]

我希望将每个0值替换为另一个矩阵b = [1, 2, 3]的值,并将每1个值替换为另一个矩阵c = [3, 4, 5]的值。

因此我最终会得到矩阵[3, 4, 5, 1, 2, 3, 1, 2, 3, 3, 4, 5]

我尝试找到0和1值的索引并用b和c替换这些索引的值,但这是不允许的,因为它们的大小不同。有没有简单的方法来实现这个目标?

2 个答案:

答案 0 :(得分:3)

鉴于

a = [1, 0, 0, 1];
b = [1, 2, 3];
c = [3, 4, 5];

让我们首先在最终矩阵中取出我们想要的数组并将它们放在一个单元格数组中:

parts = {b, c}
parts =
{
  [1,1] =
     1   2   3
  [1,2] =
     3   4   5
}

目标是使用a的值作为parts的索引,但要做到这一点,我们需要所有的值从1到n为正(如果有的话)是缺少价值,它会采取更多的工作)。在这种情况下,我们可以增加a

a_inds = a + 1
a_inds =
   2   1   1   2

现在我们可以通过添加parts(a_inds)来获取新的单元格数组,或者通过添加cell2mat来获取矩阵:

result = cell2mat(parts(a_inds))
result =
   3   4   5   1   2   3   1   2   3   3   4   5

答案 1 :(得分:0)

这也可以通过键:值映射来完成。

a = [1, 0, 0, 1];
b = [1, 2, 3];
c = [3, 4, 5];

keyset = [1,0];
valueset = {b,c};

mapobj = containers.Map(keyset,valueset);
new_vec = [];
for i =1:length(a)
    new_vec(length(new_vec)+1:length(new_vec)+length(mapobj(a(i))))= mapobj(a(i));
end

1映射到b0映射到c。 for循环迭代a构建一个包含映射值的更长的向量。

此代码将允许非顺序键,以便可以添加37并将其映射到另一个向量,而在上一个答案中,您必须将2映射到下一个向量,以便代码不会断裂。

相关问题