【问题标题】:How to change a cell array into vector in matlab?如何在matlab中将单元格数组更改为向量?
【发布时间】:2014-01-23 15:04:37
【问题描述】:

我有一个单元格数组,每个单元格都是 (x,y) 坐标上的一个点(即,单元格的大小为 [1x2])。是否可以将其更改为保留这些协调点的矩阵?

因为当我使用cell2mat时,特殊的坐标在我需要坐标的时候变成了[1x1]的大小。

我的元胞数组是这样的:[0,2] [0,2] [1,3] [-13,10] [1,4] [-1,5]

如何将其更改为这些坐标稍后可用于绘图的矢量?

【问题讨论】:

  • 请提供您预期的结果格式。
  • 也许最好问问我如何绘制一个单元格数组,而每个单元格都是 (x,y) 上的一个特殊坐标?
  • @Biju 正如 Luis 所展示的那样,然后是 plot(result(:,1),result(:,2),'*')
  • 谢谢@Dan,我只是在更新我的答案:-)

标签: matlab vector cell-array


【解决方案1】:
>> 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] 的这些坐标,虽然它们是单元格格式并且不需要将它们分开
  • 在您的问题中您说“将其更改为矩阵”...无论如何,请参阅更新的答案
  • @LuisMendo myCell = {[1 2 3],[3 4 ],[5 6 5 6 7]} 那么如何将此单元格数组转换为向量?
【解决方案2】:

实现此目的的另一种方法:

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

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

MATLAB中的元胞数组可以展开成comma-separated list,所以上面的调用等价于:vertcat(c{1}, c{2}, c{3})

【讨论】:

  • c= {[1 2 3],[3 4 ],[5 6 5 6 7]} 怎么样,那么我如何将这个单元格数组转换为向量?
  • 在您的情况下,您只能将元胞数组展平为一维向量(1x10 向量),如 v = [c{:}]v = cat(2, c{:})。您会看到连接数组时,维度必须一致;你不能有"jagged" matrix
  • 否则您可以填充每个单元格与 NaN,以便所有行在连接之前具有相同的长度。你可以在 Stack Overflow 上找到很多类似的问题,例如这个:stackoverflow.com/q/3054437/97160
【解决方案3】:
myCell = {[0,2] [0,2] [1,3] [-13,10] [1,4] [-1,5]};
hold on;
cellfun(@(c) plot(c(1),c(2),'o'),myCell);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多