我想要这个(数组=向量):
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/