Как изменить массив ячеек на вектор в Matlab?

У меня есть массив ячеек, каждая ячейка которого является точкой координации (x, y) (т.е. ячейки имеют размер [1x2]). Можно ли изменить это на матрицу, чтобы эти координационные точки были зарезервированы?

Потому что, когда я использовал cell2mat, своеобразная координация была изменена до размера [1x1], а мне нужны координаты.

мой массив ячеек такой: [0,2] [0,2] [1,3] [-13,10] [1,4] [-1,5]

Как я могу изменить его на вектор, чтобы эти координаты можно было использовать позже для построения?


person Biju    schedule 23.01.2014    source источник
comment
Укажите ожидаемый формат результата.   -  person herohuyongtao    schedule 23.01.2014
comment
Может быть, лучше спросить, как я могу построить массив ячеек, когда каждая ячейка является своеобразной координатой на (x, y)?   -  person Biju    schedule 23.01.2014
comment
@Biju Точно так, как показал Луис, а потом plot(result(:,1),result(:,2),'*')   -  person Dan    schedule 23.01.2014
comment
Спасибо, @Dan, я как раз обновлял свой ответ :-)   -  person Luis Mendo    schedule 23.01.2014


Ответы (2)


>> myCell = {[1 2],[3 4],[5 6]}; %// example cell. Can have any size/shape
>> result = cell2mat(myCell(:)) %// linearize and then convert to matrix
result =
     1     2
     3     4
     5     6

Чтобы построить:

plot(result(:,1),result(:,2),'o') %// or change line spec
person Luis Mendo    schedule 23.01.2014
comment
спасибо, Луис, но я хочу построить эти координаты [x y], пока они находятся в формате ячеек, и их не нужно разделять - person Biju; 23.01.2014
comment
В своем вопросе вы говорите, измените его на матрицу ... В любом случае, см. Обновленный ответ - person Luis Mendo; 23.01.2014
comment
@LuisMendo а как насчет myCell = {[1 2 3],[3 4 ],[5 6 5 6 7]} тогда как я могу преобразовать этот массив ячеек в вектор? - person Muhammad Usman Saleem; 05.12.2017

Другой способ добиться этого:

c = {[1 2], [3 4], [5 6]};
v = vertcat(c{:});    % same as: cat(1,c{:})

plot(v(:,1), v(:,2), 'o')

Массивы ячеек в MATLAB можно расширить в список, разделенный запятыми, поэтому приведенный выше вызов эквивалентен: vertcat(c{1}, c{2}, c{3})

person Amro    schedule 23.01.2014
comment
как насчет c= {[1 2 3],[3 4 ],[5 6 5 6 7]}, тогда как я могу преобразовать этот массив ячеек в вектор? - person Muhammad Usman Saleem; 05.12.2017
comment
в вашем случае вы можете только сгладить массив ячеек в одномерный вектор (вектор 1x10) как v = [c{:}] или v = cat(2, c{:}). Вы видите, что при объединении массивов размеры должны быть согласованными; у вас не может быть зубчатого матрица - person Amro; 05.12.2017
comment
в противном случае вы можете заполнить каждую ячейку NaN, чтобы все строки имели одинаковую длину перед объединением. Вы можете найти множество похожих вопросов здесь, в Stack Overflow, например, этот: stackoverflow.com/q/3054437/97160 - person Amro; 05.12.2017