2017-02-13 83 views
-1

我有一个载体(或阵列)如何更换一个向量的所有元素与标量

A = [2 3 4]

我想和为4的标量值我不得不更换的每一行中的所有元素验证码:

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

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

非常感谢提前。

+2

为什么不只是创建一个标量的新变量? – Aaron

+0

谢谢@Aaron。请参阅下面关于此的评论。 – User1772

+0

我不明白为什么亚伦的建议不起作用。只需分配一个标量。 – rayryeng

回答

0

谢谢你们的意见。尽管它说我应该分配一个标量,但并没有说我如何能够有效地做到这一点。这是什么工作:

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

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

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

例子:

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

如果我记得没错,在MATLAB标量为1x1矩阵

+0

谢谢@sharifi。这是行不通的,因为我需要结果在循环内进行进一步的计算,在这种情况下,'A'的值在每次迭代之后可能会改变。我希望这是有道理的? – User1772

+0

@ User1772是的,我想我明白了。假设您用'A'代替'A'的值是1x3矩阵'A'中的最后一个值是否安全? – robotHamster

+0

是的,它是安全的。这是因为会有一些'IF'语句通过分配第一,第二或最后一个元素来取代A.谢谢! – User1772

-1
for i = 1:10 
    eval(['x_' num2str(i) ' = i^2']); 
end 

该解决方案有2个问题:

  1. 创建标是慢赋值给矩阵。
  2. Challeng稍后参考新的标量。

来源

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

+0

'eval'是一个糟糕的解决方案。 -1。请阅读MathWorks的Loren Shure撰写的这篇内容翔实的文章,为什么应该避免使用'eval'并且用其他技术来完成'eval'的功能:http://blogs.mathworks.com/loren/2005/12/28/evading- eval/ – rayryeng

+0

链接不起作用。但是,我提到了这种方法的缺点。 –

+0

这些缺点与为什么'eval'很糟糕无关。顺便说一句,链接确实有效。 MathWorks可能有一个暂时的问题。 – rayryeng

相关问题