matlab - 在 Matlab 中对数组结构进行排序

标签 matlab sorting structure

我在 Matlab 中有一个数组结构 StockInfo。结构StockInfo的字段如下:

StockInfo = 

      Name: {10x1 cell}
    Values: [10x6 double]
    Return: [10x1 double]

我需要根据字段 ReturnStockInfo 进行排序,以便相应地对结构中的每个数组进行排序。知道怎么做吗?

最佳答案

正如我在上面的评论中提到的,你的问题不清楚。我认为您混淆了结构和结构数组。这post可能会有帮助。

也就是说,这里有一个例子来说明我认为你打算做什么。

首先,我用一些随机数据创建了一个结构数组:

% cell array of 10 names
names = arrayfun(@(k) randsample(['A':'Z' 'a':'z' '0':'9'],k), ...
    randi([5 10],[10 1]), 'UniformOutput',false);

% 10x6 matrix of values
values = rand(10,6);

% 10x1 vector of values
returns = randn(10,1);

% 10x1 structure array
StockInfo = struct('Name',names, 'Values',num2cell(values,2), ...
    'Return',num2cell(returns));

创建的变量是一个结构数组:

>> StockInfo
StockInfo = 
10x1 struct array with fields:
    Name
    Values
    Return

其中每个元素都是具有以下字段的结构:

>> StockInfo(1)
ans = 
      Name: 'Pr3N4LTEi'
    Values: [0.7342 0.1806 0.7458 0.8044 0.6838 0.1069]
    Return: -0.3818

接下来可以通过“return”字段对这个struct数组进行排序(每个struct都有对应的标量值):

[~,ord] = sort([StockInfo.Return]);
StockInfo = StockInfo(ord);

结果是数组现在按“返回”值升序排序:

>> [StockInfo.Return]
ans =
  Columns 1 through 8
   -0.3818    0.4289   -0.2991   -0.8999    0.6347    0.0675   -0.1871    0.2917
  Columns 9 through 10
    0.9877    0.3929

关于matlab - 在 Matlab 中对数组结构进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18670972/

相关文章:

Python,递归,排序和堆栈溢出

c++ - 如何将 C++ 代码中的枚举转换为 C

Matlab:相关数

python - 如何使用 python 按特定顺序对文件名进行排序

Matlab:改变生产线规范

c++ - 如何允许用户输入数组索引以及数组的值?

c - 给定两点计算矩形面积的嵌套结构(C语言)

c++ - 如何将类成员函数的返回类型设置为私有(private)结构的对象

matlab - 如何在不查看显示的警告的情况下意识到 ode45 的故障?

arrays - Matlab将元胞数组保存到文本文件