【问题标题】:Filling the pixels with values of another matrix用另一个矩阵的值填充像素
【发布时间】:2013-03-23 18:10:41
【问题描述】:

假设你有两个矩阵如下:

A = [1 0.2 1; 0.4 0.4 1; 1 0.6 1; 0.9 0.7 1];

B = [33 75 250; 6 34 98; 55 3 4; 153 66 30];

假设我们要创建一个新矩阵C,其中包含B 的值,其中A=1

我认为在matlab 我们可以为此做以下事情:

C = B(A==1);

但是,我怎样才能用A 的原始值填充其他单元格,因为我认为在我们的例子中,我们只会得到一个带有B 元素的向量,它们的对应值在A=1 中?而且,我希望C 具有与B 相同的尺寸,但A 的原始值 等于1,而不是0 值。

【问题讨论】:

  • 您的问题有问题,因为您要求将B 的一些值分配给C,然后所有其他值应该是B 的值,这意味着最后C 将与 B 相同。
  • 是的,我也明白这一点,但我认为他是在谈论保持尺寸,并用零填充其他值。
  • 抱歉,我已编辑我的问题。我的意思是A 的原始值不是B。我的问题现在更清楚了吗?谢谢

标签: matlab matrix pixels


【解决方案1】:

是的,你可以这样做:

C= A.*(A~=1)+B.*(A==1)

这给出了:

C =

33.0000    0.2000  250.0000
0.4000    0.4000   98.0000
55.0000    0.6000    4.0000
0.9000    0.7000   30.0000

【讨论】:

  • 感谢您的回复。对于您拥有的值0,我希望它们是A 而不是0 的原始值。这是我的主要问题。你知道我该怎么做吗?如果您能看到,我已对我的问题进行了编辑
  • 好的,现在很清楚了。我改变了解决方案,它是基于相同的原理。
  • 非常感谢您的回答。只是好奇。 .* 是什么意思?我在哪里可以找到有关它的更多信息?
  • 当您添加 .在像 *、/ 或 ^ 这样的运算符前面,它按元素执行操作,而不是执行矩阵乘法。见mathworks.fr/fr/help/matlab/ref/arithmeticoperators.html
  • 如果这回答了你的问题,请接受这个答案。
【解决方案2】:

C 无论如何都必须被初始化,所以让我们将它初始化为A,就像C = A; 一样。然后,MATLAB 允许您像在C(A==1) = B(A==1); 中一样对左侧进行索引,以将C 中的所有元素替换为B 中的A == 1 中的元素。所有其他元素将保持不变。

【讨论】:

  • 感谢您的回复。如果您能看到,我已经对我的问题进行了编辑。谢谢
  • 好的,这很有意义。我也更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-29
  • 2019-05-29
  • 2012-02-24
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
相关资源
最近更新 更多