我有一个任意矩阵,a = [1, 0, 0, 1]
。MATLAB用另一个矩阵替换矩阵的某些值
我想用另一个矩阵b = [1, 2, 3]
的值替换每个0值,并且每个值都用另一个矩阵的值c = [3, 4, 5]
替换。
因此,我会结束矩阵[3, 4, 5, 1, 2, 3, 1, 2, 3, 3, 4, 5]
。
我试过找到0和1值的索引,并用b和c替换那些索引的值,但这是不允许的,因为它们不是相同的大小。有没有简单的方法来实现这一点?
我有一个任意矩阵,a = [1, 0, 0, 1]
。MATLAB用另一个矩阵替换矩阵的某些值
我想用另一个矩阵b = [1, 2, 3]
的值替换每个0值,并且每个值都用另一个矩阵的值c = [3, 4, 5]
替换。
因此,我会结束矩阵[3, 4, 5, 1, 2, 3, 1, 2, 3, 3, 4, 5]
。
我试过找到0和1值的索引,并用b和c替换那些索引的值,但这是不允许的,因为它们不是相同的大小。有没有简单的方法来实现这一点?
鉴于
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
我正在写这篇文章:-) –
@LuisMendo我看到了,偷走了你的答案。忍者布偶! ;) – beaker
这也可以一键完成:价值地图。
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
被映射到b
并0
映射到c
。 for循环遍历a
构建一个包含映射值的更长的向量。
此代码将允许非连续的键,以便可以将37添加并映射到另一个向量,而在上一个答案中,您必须将2
映射到下一个向量才能使代码不中断。
'b'和'c'会有相同的尺寸吗? –