Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Matlab绘制结构阵列_Matlab_Matlab Figure_Matlab Guide - Fatal编程技术网

用Matlab绘制结构阵列

用Matlab绘制结构阵列,matlab,matlab-figure,matlab-guide,Matlab,Matlab Figure,Matlab Guide,我在MATLAB中有一个结构数组(98*1): 现在我正试图用两个特定的字段(比如x和y)绘制一个图。这98行中的每一行都有x和y的值。尝试使用以下命令进行绘图时出错 plot(ans{1:98,1}.x,ans{1:98,1}.y) 应为大括号或点索引表达式的一个输出,但 共有98项结果 just(第1行)绘图错误(ans{1:98,1}.x,ans{1:98,1}.y) 需要帮助才能知道我做错了什么,以及如何纠正它。你可以通过 S = [ans{:}]; x = [S.x]; y = [

我在MATLAB中有一个结构数组(98*1):

现在我正试图用两个特定的字段(比如x和y)绘制一个图。这98行中的每一行都有x和y的值。尝试使用以下命令进行绘图时出错

plot(ans{1:98,1}.x,ans{1:98,1}.y)
应为大括号或点索引表达式的一个输出,但 共有98项结果

just(第1行)绘图错误(ans{1:98,1}.x,ans{1:98,1}.y)


需要帮助才能知道我做错了什么,以及如何纠正它。

你可以通过

S = [ans{:}];
x = [S.x];
y = [S.y];
plot(x,y)
第一行将单元格数组转换为结构数组
ans{:}
返回单元格数组中所有元素的逗号分隔列表。方括号表示这一点,将所有元素连接成一个向量

S.x
再次返回逗号分隔的列表。在这里,我们将所有x值连接成一个数值向量


不请自来的建议 但是请,请,请改变你存储数据的方式。下面我将为你为什么要这样做提供一个理由

让我们从与您类似的结构(每个元素都是结构的单元数组)中的一些随机数据开始:

更好的解决方案是结构阵列:

S = [C{:}];
结构数组是MATLAB中的标准对象:它是一个数组,其中每个元素都是相同的结构。您对这两者的索引有些不同:

>> C{5}
ans = 
  struct with fields:
         x: -0.0818
         y: 0.5463
         z: -0.8194
      name: 'ysrkqlzcms'
    status: 1

>> S(5)
ans = 
  struct with fields:
         x: -0.0818
         y: 0.5463
         z: -0.8194
      name: 'ysrkqlzcms'
    status: 1
为什么
S
C
更好

结构数组在内存方面效率更高 请注意,
C
几乎是
S
的两倍。为什么会这样
C
包含100个结构,每个结构存储一些值,但也存储这些值的名称。因此,C存储了100倍相同的名称(在本例中,
'x'
'y'
'z'
'name'
'status'
S
只存储一次

结构数组更容易索引。 你需要发布这个问题就证明了这一点。我回答的第一步是将单元格数组转换为结构数组。路易斯·门多(Luis Mendo)的回答表明,使用结构单元数组是多么尴尬

结构数组更安全 您可以执行
C{5}='sorry'
,并阻止任何使用结构的所有
x
元素的方法,因为其中一个单元格不再是结构
S(5)=“对不起”
给出了一个错误。也就是说,没有办法强制您的结构单元数组中的所有结构都具有相同的元素。这使事情变得非常复杂

但还有更好的方法 因为MATLAB R2013b有一个
类。
table
类型的对象甚至比struct数组更好

T = struct2table(S);
表将每列存储为单个数组,因此开销小得多。也就是说,
T.x
是单个数组,而不是
S.x
是100个数组。这使得它更加高效:

>> whos
  Name        Size              Bytes  Class     Attributes
  C           1x100            103700  cell                
  S           1x100             60820  struct              
  T         100x5               17476  table               
注意
T
如何使用
C
的1/6内存。这也使得它的类型安全:保证每行的
x
值的类型和大小相同。如果将
x
定义为标量双精度,则不能将字符串指定给一个
x
值,也不能指定任何非标量的值

再次索引略有不同,但是
T.x
直接为所有
x
值提供数组,并且

>> T(5,:)
ans =
  1×5 table
    x           y          z            name        status
_________    _______    ________    ____________    ______
-0.081774    0.54633    -0.81939    'ysrkqlzcms'    true  

因此,你不用索引
C{5}.x
S(5.x
,而是做
T.x(5)
,你可以通过

S = [ans{:}];
x = [S.x];
y = [S.y];
plot(x,y)
第一行将单元格数组转换为结构数组
ans{:}
返回单元格数组中所有元素的逗号分隔列表。方括号表示这一点,将所有元素连接成一个向量

S.x
再次返回逗号分隔的列表。在这里,我们将所有x值连接成一个数值向量


不请自来的建议 但是请,请,请改变你存储数据的方式。下面我将为你为什么要这样做提供一个理由

让我们从与您类似的结构(每个元素都是结构的单元数组)中的一些随机数据开始:

更好的解决方案是结构阵列:

S = [C{:}];
结构数组是MATLAB中的标准对象:它是一个数组,其中每个元素都是相同的结构。您对这两者的索引有些不同:

>> C{5}
ans = 
  struct with fields:
         x: -0.0818
         y: 0.5463
         z: -0.8194
      name: 'ysrkqlzcms'
    status: 1

>> S(5)
ans = 
  struct with fields:
         x: -0.0818
         y: 0.5463
         z: -0.8194
      name: 'ysrkqlzcms'
    status: 1
为什么
S
C
更好

结构数组在内存方面效率更高 请注意,
C
几乎是
S
的两倍。为什么会这样
C
包含100个结构,每个结构存储一些值,但也存储这些值的名称。因此,C存储了100倍相同的名称(在本例中,
'x'
'y'
'z'
'name'
'status'
S
只存储一次

结构数组更容易索引。 你需要发布这个问题就证明了这一点。我回答的第一步是将单元格数组转换为结构数组。路易斯·门多(Luis Mendo)的回答表明,使用结构单元数组是多么尴尬

结构数组更安全 您可以执行
C{5}='sorry'
,并阻止任何使用结构的所有
x
元素的方法,因为其中一个单元格不再是结构
S(5)=“对不起”
给出了一个错误。也就是说,没有办法强制您的结构单元数组中的所有结构都具有相同的元素。这使事情变得非常复杂

但还有更好的方法 因为MATLAB R2013b有一个
类。
table
类型的对象甚至比struct数组更好

T = struct2table(S);
表将每列存储为单个数组,因此开销小得多。也就是说,
T.x
是单个数组,而不是
S.x
是100个数组。这使得它更加高效:

>> whos
  Name        Size              Bytes  Class     Attributes
  C           1x100            103700  cell                
  S           1x100             60820  struct              
  T         100x5               17476  table               
注意
T
如何使用
C
的1/6内存。这也使得它的类型安全:
x