【发布时间】:2020-10-07 19:06:21
【问题描述】:
如何从 Octave struct 获取所有行的完整列(字段名)的所有值?
我会将它放入一个元胞数组或常规向量中,最好不要循环。
【问题讨论】:
如何从 Octave struct 获取所有行的完整列(字段名)的所有值?
我会将它放入一个元胞数组或常规向量中,最好不要循环。
【问题讨论】:
您似乎混淆了一些事情。部分原因是您将结构与“R dataframes / python pandas”进行了等效比较。
结构体最好被认为类似于 python dicts、R 列表等。它们是一个特殊的对象,可以保存“字段”,可以通过“字段名”访问(或者通过键访问的值,如果你更喜欢)。
此外,与 octave 中的任何其他对象一样,它们是数组的有效元素。这意味着你可以拥有这样的东西:
octave:1> struct( 'name', { 'Tom', 'Jim'; 'Ann', 'Sue' }, 'age', { 20, 21; 22, 23 } )
S =
2x2 struct array containing the fields:
name
age
一般来说,当处理这样一个结构 array 时,访问该数组的多个元素上的一个字段会产生一个comma separated list。例如
octave:6> S(2,:).name
ans = Ann
ans = Sue
这可以传递给(即“扩展为”)任何需要这种逗号分隔列表作为参数的函数。例如
octave:7> fprintf( 'The girls names are %s, and %s.\n', S(2,:).name )
The girls names are Ann, and Sue.
如果需要,您还可以将该列表直接传递到“单元构造函数”中,以创建单元。 (尽管如果您希望它具有特定的形状,则必须在之后对其进行重塑)。例如
octave:9> reshape( { S.age }, size(S) )
ans =
{
[1,1] = 20
[2,1] = 22
[1,2] = 21
[2,2] = 23
}
还有struct2cell,但这有一些不同。试试看它做了什么(例如C = struct2cell(S))。
最后,为了避免混淆,考虑到当处理结构数组时,“列”指的是“数组”中的列,我会避免使用该术语来指代“字段名”。
【讨论】:
myarr = [struc.field]。