如何在Matlab中将单元数组转换为向量?

3
我有一个单元数组,每个单元格都是一个点的(x,y)坐标(即,单元格大小为[1x2])。是否可能将其更改为矩阵以保留这些坐标点?
因为当我使用cell2mat时,这个特殊的坐标被更改为[1x1]的大小,而我需要这些坐标。
我的单元数组是这样的:[0,2] [0,2] [1,3] [-13,10] [1,4] [-1,5] 我该如何将它更改为向量,以便稍后用于绘图?

2
请提供您期望的结果格式。 - herohuyongtao
也许更好的问题是如何在每个单元格都是特定坐标(x,y)的情况下绘制单元格数组? - Biju
1
@Biju 就像Luis所展示的那样,然后 plot(result(:,1),result(:,2),'*') - Dan
谢谢@Dan,我刚刚更新了我的答案 :-) - Luis Mendo
3个回答

6
>> 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

谢谢Luis,但我想绘制这些[x y]坐标,而它们是以单元格格式存在的,不需要将它们分开。 - Biju
在你的问题中,你说“将其更改为矩阵”...无论如何,请查看更新后的答案。 - Luis Mendo
@LuisMendo 那如果 myCell = {[1 2 3],[3 4 ],[5 6 5 6 7]},我该如何将这个单元数组转换为向量? - Muhammad Usman Saleem

4
另一种实现方法:
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})

那么对于 c={[1 2 3],[3 4],[5 6 5 6 7]},我该如何将这个单元数组转换为向量呢? - Muhammad Usman Saleem
在您的情况下,您只能将单元数组展平为一维向量(1x10向量),如 v = [c{:}]v = cat(2, c{:})。您可以看到,在连接数组时,维度必须是一致的;您不能有一个"jagged" matrix - Amro
否则,您可以使用NaN填充每个单元格,以便在连接之前所有行具有相同的长度。您可以在Stack Overflow上找到许多类似的问题,例如这个:https://dev59.com/L3A75IYBdhLWcg3w4tR7 - Amro

0
myCell = {[0,2] [0,2] [1,3] [-13,10] [1,4] [-1,5]};
hold on;
cellfun(@(c) plot(c(1),c(2),'o'),myCell);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接