【问题标题】:How do i replace all elements of a vector with a scalar如何用标量替换向量的所有元素
【发布时间】:2017-02-13 21:33:34
【问题描述】:

我有一个向量(或数组)

A = [2 3 4]

我想用标量值 4 替换每一行的所有元素。我有代码:

for ii = 1: size(A, 1) A(ii,:) = 4 end

这将返回A = [4 4 4]。如何获得1x1 矩阵:A = [4] 而不是1x3 矩阵?

非常感谢。

【问题讨论】:

  • 为什么不直接创建一个新的标量变量?
  • 谢谢@Aaron。请在下面查看我的 cmets。
  • 我不明白为什么 Aaron 的建议不起作用。只需分配一个标量。

标签: arrays matlab


【解决方案1】:

您可以将 NxM 向量/矩阵/数组替换为一个标量变量,只需为其分配一个标量即可。

例子:

>>> A = [1,2,3]
A =
    [1 2 3]
>>> A = 4
A =
    4

如果我没记错的话,MATLAB 中的标量是一个 1x1 矩阵

【讨论】:

  • 谢谢@sharfi。这不起作用,因为我需要结果才能在循环中进行进一步的计算,在这种情况下,'A' 的值可能会在每次迭代后发生变化。我希望这是有道理的?
  • @User1772 是的,我想我明白了。假设您要替换 A 的值是 1x3 矩阵 A 中的最后一个值是否安全?
  • 是的,它是安全的。这是因为将有几个“IF”语句将通过分配第一个、第二个或最后一个元素来替换 A。谢谢!
  • 在这种情况下尝试B = A(index); A = []; A=B;
【解决方案2】:

感谢你们的 cmets。尽管它说我应该分配一个标量,但它并没有说明我如何有效地做到这一点。这是有效的:

A = [2 3 4; 1 3 2];

for ii = 1: size(A, 1)
   B(ii,:) = A(ii,3)  
end

【讨论】:

    【解决方案3】:
    for i = 1:10
        eval(['x_' num2str(i) ' = i^2']);
    end
    

    这个解决方案有两个问题:

    1. 创建标量比为矩阵赋值慢。
    2. 挑战稍后引用新标量。

    来源

    https://www.mathworks.com/matlabcentral/answers/29712-creating-a-new-variable-in-each-iteration

    【讨论】:

    • eval 是一个糟糕的解决方案。 -1。请阅读来自 MathWorks 的 Loren Shure 的这篇内容丰富的帖子,了解为什么应该避免使用 eval 以及完成 eval 所做的替代技术:blogs.mathworks.com/loren/2005/12/28/evading-eval
    • 链接失效。但是,我提到了这种方法的缺点。
    • 这些缺点与eval 烂的原因无关。顺便说一句,链接确实有效。 MathWorks 可能有一个暂时的问题。
    • @rayryeng 你认为我应该删除这个答案还是只写它的副作用。
    猜你喜欢
    • 2016-08-16
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 2021-04-03
    • 2014-11-20
    相关资源
    最近更新 更多