【问题标题】:Multiplying one value in a matrix with a range of numbers (for loop) in matlab将矩阵中的一个值与matlab中的一系列数字(for循环)相乘
【发布时间】:2015-10-29 15:40:37
【问题描述】:

我正在尝试编写一个简单的代码,用一系列数字替换矩阵中的一个特定值。更清楚地说,假设我有我的矩阵 G,它是一个 3x3 矩阵,我想用 (3,3)+i 替换 G 中的 (3,3) 值,其中 i 是 1 - 10。我想创建本质上10 个新矩阵,其中 (3,3) 替换为 (3,3)+1,然后是 (3,3)+2,然后是 (3,3)+3,直到值 10。 原矩阵为:

G=[2 4 5; 6 7 8; 8 8 2]

所以,输出应该是一系列 10 个新的 G 矩阵,所以 (3,3)+1 应该给我

G=[2 4 5; 6 7 8; 8 8 3]

对于 (3,3)+2 它应该给我:

G=[2 4 5; 6 7 8; 8 8 4]

我知道我可以逐行重新编码每个矩阵,但我想创建一个循环来有效地执行此操作,并可能将 i 更改为 .001 增量而不是 1 的步长。

我尝试编写一个简单的代码,但我知道我缺少输出部分并且我遇到了一些括号问题。

for i = 1:10;
    B[3,3]= B[3,3]+i;
end

【问题讨论】:

  • 试试bsxfun(@plus,G,cat(3,1,2,3,4,5,6,7,8,9,10))
  • 对不起上面的评论,我的意思是:M = zeros(3,3,10);M(3,3,:) = 1:10;B = bsxfun(@plus,G,M)。然后您可以以B(:,:,i) 的身份访问ith 矩阵。
  • @Sophia14 在您的代码中,您需要将B[3,3] = B[3,3]+i; 替换为B(3,3) = B(3,3)+i;

标签: matlab for-loop matrix replace


【解决方案1】:

很简单:

1) 制作元胞数组:B = cell(1,10);

2) 制作一个矩阵,位置 (3,3) 为 1,其他位置为 0:M33 = zeros(3,3); M33(3,3) = 1;

3) 循环从 1 到 10 的数字并将 G+i*M33 保存到 Bith 条目中:

for i = 1:10
  B{i} = G+i*M33;
end

您现在可以以B{i} 的身份访问ith 矩阵。

【讨论】:

  • 那么,你刚刚创建了另一个矩阵并将它们添加到循环中?我想我明白了。谢谢。
  • 如何让循环自动在一个新的单独变量中生成所有新矩阵。我看到我可以通过 B{i} 访问它,但我希望每个都被生成并保存在一个新变量中。所以,如果我说 B{4} : G=[2 4 5; 6 7 8; 8 8 6];但如果我只说 B{i},它会给我第 10 个 i 的 B。
  • 你可以这样做,但我不建议这样做!我知道问“我该怎么做 X”这个问题很烦人。并得到答案“你不应该做 X!”。所以让我把它转过来!给我一个好的(!)理由,为什么您希望它们在单独的变量中;然后我会向您解释如何 - 或者更有可能我会解释为什么这不是一个好主意以及您应该如何去做!
  • 好吧,我想使用创建的新矩阵,然后用它来显示 MLE 如何在我的原始 maxtrix 以及当我添加和减去时最大化,例如10 那么“最佳”是原始矩阵。希望这是有道理的。所以,我认为在我需要能够让所有矩阵可用之后代码才能工作,因为如果我写 B{i} 那么它只会给我第 10 个而不是全部。
  • 别担心!您可以访问所有矩阵。 B{1} 为第一个矩阵,B{2} 为第二个矩阵,依此类推,输入B{i} 时得到第10 个矩阵的原因是i=10 所以B{i}B{10} 相同这个案子!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-31
  • 2023-03-20
  • 1970-01-01
相关资源
最近更新 更多