2014-11-10 17 views

ответ

5
function [v1, v2] = DivideVectorIntoTwo (v) 
    midindex = floor (length (v)/2) ; 
    v1 = v (1:midindex) ; 
    v2 = v (midindex+1 :end) ; 
end 
+1

хорошая идея разместить его внутри функции. +1 –

+1

Если вы делаете это функцией, то либо разделяете по указанному размеру, либо проверяете количество измерений и выдаете ошибку, если больше 1 ... – Dan

+2

@ Если вы правы, но с другой стороны, функция называется DivideVectorIntoTwo ... Поэтому, я думаю, вы можете аргументировать, что она предназначена только для векторов, которые по определению являются 1-dim. –

2

Я бы порекомендовал проверить некоторые основные операции с матрицей.

если вы берете Вектор x

x=1:1000; 

вы можете легко разделить его на несколько новых массивов. Если вы хотите иметь массивы с одинаковой длиной, вы должны использовать numel() или size(), чтобы получить размер, а затем взять половину его.

length_of_x=numel(x); 
new_length=ceil(length_of_x/2); 

Я использовал ceil() (округление) в случае, если ваш й не имеет длину: 2,4,6,8 и так далее, но 1,3,5 ... Тогда вы можете использовать 1:new_length, чтобы получить первая половина и new_length+1:end для более поздней половины.

x1=x(1:new_length); 
x2=x(newlength+1:end); 

был бы результатом для вашей задачи.

0

end умная команда в MATLAB, который может быть использован в качестве ярлыка во многих ситуациях, например, когда вы хотите взять только первую половину вектора, например:

v(1:end/2); 

Вы можете разделить вектор на два с использованием deal в анонимной функциональной ручке:

split_vec = @(x) deal(x(1:floor(end/2)), x(floor(end/2)+1:end)); 

[a, b] = split_vec(1:10) 
a = 
    1  2  3  4  5 
b = 
    6  7  8  9 10 
Смежные вопросы