arrays - 如何在 Matlab 中创建向量中包含的结构域的投影?

标签 arrays matlab dictionary octave projection

我想要这个(数组=向量):

array.Select(elem => elem.my_field).ToArray(); // C# + Linq
array map _.my_field // Scala, I believe

用简单的英语来说,我有向量。每个元素都是结构。每个结构都有字段(任何类型)。现在,我不想拥有这个,而是想要拥有“字段”向量。

示例:

所以,如果最初我有姓名+年龄结构的向量(请参阅下面的更新),我想创建投影,所以我最终得到年龄向量(年龄序列)。

我尝试了 arrayfun 函数,但这给了我错误:

error: cellfun: all values must be scalars when UniformOutput = true

我怀疑这是环境设置,但我无法切换它们,因为我的代码将在陌生的环境中运行。

更新: 我把这个例子过于简单化了,很抱歉——年龄是一个数字,但有时它是一对数字。所以在一般情况下,我必须假设它可以是任意长度的数字向量(据我所知,在Matlab中数字是向量.length=1)。

问题

如何在Matlab中进行这样的“组合”投影?

最佳答案

您可以使用cat来连接您的数组:

s = struct('age',{10 20 20},'name',{'Bob','Max','Peter'})
1x3 struct array with fields:
    age
    name

age = cat(1,s.age)
age =
    10
    20
    20

如果您想使用arrayfun,您需要执行以下操作:

age = arrayfun(@(x)x.age,s);

编辑

要连接字段长度未知的结构,有两种选择:如果您只想要所有“年龄”,并且“年龄”#5 最终位于位置 6 并不重要,因为有“age”#2 的两个条目,您沿着所有“age”数组具有相同长度的维度进行连接。例如,如果它们都是 1x1 或 1x2 或 1x3 数组等,您可以编写

age = cat(2,s.age);

如果您希望输出数组的元素 #2 有两个条目(因为 s(2).age 有两个条目),则可以连接到 CELL ARRAY

age = {s.age};

age 的每个元素(通过括号访问)都是一个 1x1 元胞数组,可以包含任何大小的任何类数组;要访问元胞数组元素的内容,请使用大括号:age(2) 是元胞数组的第二个元素,age{2 } 是所述元素的内容,即 1x2 数字数组。

关于arrays - 如何在 Matlab 中创建向量中包含的结构域的投影?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9758454/

相关文章:

SQL 到 JSON - 将结果分组到 JSON 数组中

PHP - 组合来自同一二维数组的 2 个元素

matlab - 涉及逆运算的矩阵乘法 : getting infinity

android - 在 webview 中显示谷歌地图而不是使用通常的 mapView 是否有性能损失

c++ - 在 map 值中插入一个类方法并使用模板

arrays - 计算相似度数大于 K 的子数组

javascript - JavaScript 数组大小的 "acceptable"上限是多少?

matlab - 'eig' 和 'eigs' 有什么区别?

algorithm - 将 Fortran77 代码转换为 Matlab 代码以查找特征值/向量

python - 地理位置词典