gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:53:49 24 4
gpt4 key购买 nike

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

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 中所理解的,一个数字是 vector.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 并不重要,因为有两个条目“年龄”#2,您沿着所有“年龄”数组具有相同长度的维度进行串联。例如,如果它们都是 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com