2014-01-28 1 views
1

Есть ли более простой способ создания такого вектора b = [1,3,5,7,9,7,5,3,1]?Как увеличить и уменьшить в векторе в matlab

То, что я сделал, я в основном разделил вектор в возрастающих и убывающих частей и используется horzcat следующим образом:

a=horzcat((1:2:9),(7:-2:1)); 

disp(a); 

Однако, это не кажется очень ЭФФЕКТИВНАЯ. Есть ли более простой способ сделать это, не объявляя и не конкатенируя два вектора?

Спасибо.

+0

Код кажется очень эффективным. – Daniel

ответ

3

Это не ужасно неэффективно, нет. Тем не менее, вам не нужно вызывать horzcat по имени:

a = [1:2:9 7:-2:1] 

Но если вы хотите, чтобы избежать второго набора colon операторов, вы могли бы перевернуть первую сторону:

a = 1:2:9; 
a = [a fliplr(a(1:end-1))] 

Но там вы есть еще colon, и это определенно более эффективно сделать это первым способом.

Возможно, по c = 9; s = 2; b = 1:s:c-2; a = [b c fliplr(b)]; если c-1 делится на s, но я не вижу смысла усложнять простую операцию, как это ... если это не то, как вы получите ваши удары. ;)

+0

Не было бы более эффективным делать «a = 1: 2: 7; a = [a 9 fliplr (a)]; '? Не очень, очевидно, но он избегает дополнительного двоеточия. – MrAzzaman

+0

@MrAzzaman Забавно, я просто печатал его с переменными для общности. :) – chappjc

+0

Если вы хотите быть очень общим: 'c = 9; s = 2; cs = floor (c/s); a = c + s * -abs ((1: (2 * cs + 1)) - (cs + 1)) - rem (c-1, s); '. Но это просто глупо. – MrAzzaman

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