2014-01-27 2 views
0

Я пытаюсь создать вектор-столбец с 30 одинаковыми значениями компонентов в среде MATLABБыстро порождающие векторы в Matlab

Конечно, я могу просто написать

v = [1;1;1;1;1;1;...;1] 

с 30 1, но после рассмотрения в MATLAB учебник и поиск в Интернете, я не нашел способ, которым вы можете упростить это выражение с выражением, которое обозначает, сколько значений вы хотите поместить в определенное значение (например, вы можете делать в numpy).

Есть ли способ сделать это в MATLAB?

+4

использовать функции: 'ones (30,1)' – Dan

+0

Если скорость - это цель, вы, вероятно, будете просто использовать 'ones', если вы на самом деле выделяете массив из всех. Если это что-то другое, например '3', то« нули »(30,1) + 3', вероятно, будут быстрее. Больше деталей [здесь] (http://undocumentedmatlab.com/blog/allocation-performance-take-2/) и [здесь] (http://undocumentedmatlab.com/blog/preallocation-performance/). – horchler

ответ

4

Другим способом сделать это является

v_row = repmat(some_value, 1, count); 

или

v_column = repmat(some_value, count, 1); 

Где some_value значение, которое вы хотите инициализировать вектор с. count - это количество значений, которое вы хотите сгенерировать.

6

Вы можете сделать это:

v = some_value .* ones(1,count); // Row vector 

или

v = some_value .* ones(count,1); // Column vector 

Где some_value значение, которое вы хотите инициализировать вектор с. count - это количество значений, которое вы хотите сгенерировать.

+0

Комментарий от Дэна делает то, что мне нужно сделать, но спасибо за обобщение. Прекрасно работает! – user3239567

+1

@ user3239567 .. Вы можете принять ответ, если он решает проблему. :) – sgarizvi

+1

Вопрос говорит «быстро», поэтому «v = some_value + zeros (1, count);' будет [вероятно, быстрее] (http://undocumentedmatlab.com/blog/allocation-performance-take-2/) для всего, кроме, может быть, '1'. – horchler

Смежные вопросы