2017-02-13 4 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 представляет собой матрицу 1х1

+0

Спасибо @sharifi. Это не сработает, потому что мне понадобится результат для дальнейших вычислений в цикле, и в этом случае значение «A» может измениться после каждой итерации. Я надеюсь в этом есть смысл? – User1772

+0

@ User1772 Да, думаю, я понимаю. Можно ли предположить, что значение, которое вы заменяете 'A', является последним значением в матрице 1x3' A'? – robotHamster

+0

да, это безопасно. Это связано с тем, что будут пара инструкций «IF», ​​которые заменят A, назначив 1-й, 2-й или последние элементы. Благодаря! – User1772

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

Это решение имеет 2 вопроса:

  1. Создать скаляр медленнее, чем присвойте значение матрице.
  2. Снова обратиться к новым скалярам.

Источник

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

+0

' eval' - это дерьмовое решение. -1. Пожалуйста, прочитайте этот информативный пост Лорен Шьюре из MathWorks о том, почему следует избегать «eval» и альтернативных методов для выполнения того, что делает «eval»: http://blogs.mathworks.com/loren/2005/12/28/evading- eval/ – rayryeng

+0

Ссылка не работает. Однако я упомянул об этом недостатке. –

+0

Эти недостатки не имеют никакого отношения к тому, почему 'eval' сосет. Кстати, ссылка действительно работает. У MathWorks, вероятно, была временная проблема. – rayryeng