【问题标题】:Matlab find the maximum and minimum value for each point of series of arrays (with negative values)Matlab找到一系列数组的每个点的最大值和最小值(负值)
【发布时间】:2023-03-31 17:58:01
【问题描述】:

假设我们有下一系列数组:

A = [1, 2, -2, -24];
B = [1, 4, -7, -2];
C = [3, 1, -7, -14];
D = [11, 4, -7, -1];
E = [1, 2, -3, -4];
F = [5, 14, -17, -12];

我想创建两个数组, 第一个将是所有数组每列的最大值, 即

Maxi = [11,14,-2 -1];

第二个将是所有数组每列的最小值 即

Mini= [1,1,-17 -24];

我整天都在尝试,使用循环,最大和 abs,但我无法让它工作

在我的问题中有一个矩阵 (100,200),所以通过上面的示例,我试图轻松解决问题。最终目标是获得 200 个 x_points 的 100 个 y_lines 的拟合。这个想法是计算两条线(即最大值,最小值),这将是所有线的“视觉”边界(每个 x 的最大值和最小值)。下一步将计算这两个数组的平均值的数组,所以最后将是所有行之间的一条线。

欢迎任何帮助!

【问题讨论】:

  • 100 y_lines 和 200 x_pts,你的意思是你有一个 100x200 列的数组,你想要一个行向量 Maxi,它是 1x200 并且每列的最大值? (类似于 Mini..)
  • 是的,但问题是我有负值(海平面以上和以下的海拔高度)。因此,对于最大的第一个数组:我需要最大的正值和最小的负值,它们是最大值。对于第二个最小 1x200 数组,当我只有负数时,我想要最小正值和最大负值(如 A-F 数组的最后两列。
  • 那么为什么不使用 abs() 函数。对于 Maxi max(abs([A;B;C;D;E;F])) 和 Mini min(abs([A;B;C;D;E;F]))。您在问题中的示例也没有反映这一点。按照你的逻辑,Maxi 不应该是 [11, 14, -17, -24] 吗?
  • 如果你尝试你就会明白为什么我不能使用它! max(abs([A;B;C;D;E;F])) 给出 [11 14 17 24] 不是我的 Maxi,而 min(abs([A;B;C;D;E;F])) , 给出 [1 1[2 1]。关于您的第二条评论,不是因为您需要将这些数据视为海平面以上和以下的海拔高度。最大负数是最小值。

标签: matlab matrix max min data-fitting


【解决方案1】:

这个怎么样?

假设你把所有的行向量堆叠起来,即A,B...,F

arr=[A;B;C;D;E;F];% stack the vectors

然后使用Matlab提供的max()min()mean()函数。也就是说,

Maxi = max(arr); % Maxi is a row vector carrying the max of each column of arr

Mini = min(arr);
Meani = mean(arr);

您只需将它们堆叠起来,如上所示。但是,如果您有 100 个行向量,请使用循环将它们堆叠到数组 arr 中,如上所示。

【讨论】:

  • 希望向量已经堆叠在一个数组中。像这样的 100 个单独的向量将是可怕的编码。
  • 是的,它正在工作!诀窍是堆叠向量!谢谢!
  • 你知道除了mean之外的其他方法,用Matlab函数创建一个拟合线(数组)吗?根据您的经验,解决问题的方式听起来不错?
  • @user1640255 1) mean() 应该没问题。瓶颈不是函数 min()、max() 或 mean()。 2) 耗时的部分是将所有这些行向量堆叠到一个大数组中的 for 循环。如果您能够更改生成向量 A、B、..、F 的代码,以便一次生成堆叠数组(使用线性代数和/或 matlab 向量化),那么您可以更好地改进时间。
  • 再想一想,对于较少和离散的数据,我发现中位数是显示模式的更稳健的选择。另请阅读有关箱线图的信息,看看您是否想要所有/某些 x 点的那种东西
猜你喜欢
  • 2018-03-12
  • 2014-12-15
  • 2014-11-04
  • 2023-03-08
  • 1970-01-01
  • 2020-05-25
  • 2013-10-24
  • 2015-01-09
  • 2015-05-30
相关资源
最近更新 更多