【问题标题】:Minimum value of group of numbers in variable变量中数字组的最小值
【发布时间】:2014-08-06 12:02:10
【问题描述】:

我正在尝试通过特定风暴 id 找到最小压力并将其分配为 1。我尝试使用带有 if 语句的嵌套 for 循环,但这不起作用。下面是我的代码,如果你能帮忙,那就太好了!

lifecycle = zeros(285,1);                    %// variable lifecycle denotes max storm intensity

for c = 1:285                                %// counter
    for id = 188:100:1288                    %// loop through each storm code(188,288,...1288)
       if min_press(c) == min(min_press(id)) %// find min pressure of each id 
           lifecycle(c) = 1;                 %// assign min a value of 1 
       end
    end
end 

【问题讨论】:

  • 那么mean_press 是什么?请发帖mcve
  • min_press = 最小压力;在之前的代码中从我的数据集 (ebtrk) 定义的变量,如下所示: min_press = ebtrk(:,8); %最小压力 (hPa)
  • 上面的代码没有意义。根据您的问题陈述,您自然会假设min_press 将是一个二维矩阵。行由c 子集,而列由id 子集。根据您上面的评论,min_press 只是一个列向量。
  • 您尚未发布min_press 的示例,因此无法运行您的代码并找出它失败的原因。这就是为什么我建议您发布mcve。它肯定会增加您获得有用答案的机会。
  • 对不起 - matlab 和 stackoverflow 的新手。这是 min_press '1015' '1014' '1013' '1012' '1011' '1009' '1006' '1002' '1002' '1008' 的示例

标签: matlab nested-loops minimum


【解决方案1】:

假设您的 min_press 变量是一个 2D 矩阵,最小压力表示为列向量,您可以这样做。

A是你的压力值

A= randn(3,3)

  -0.063413  -2.130337   0.590931
   0.233517  -0.112800  -0.898581
  -0.395259   0.303704   2.508438

min() 逐列工作,因此取矩阵的最小值将为您提供每列的最小值

[val, row] = min(A)

val =

-0.39526  -2.13034  -0.89858

row =

3   1   2    

将这些转换为与矩阵A相关的索引

 ind = sub2ind(size(A),row.', [1:length(row)].')

ind =

   3
   4
   8

将它们应用到A

A(ind) = 0

A =

  -0.06341   0.00000   0.59093
   0.23352  -0.11280   0.00000
   0.00000   0.30370   2.50844

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-06
    • 2018-12-20
    • 2012-08-09
    • 1970-01-01
    • 2023-03-18
    • 2019-11-05
    • 2021-04-29
    • 2017-05-30
    相关资源
    最近更新 更多