【问题标题】:Function which finds temperatures for a given month from data从数据中查找给定月份的温度的函数
【发布时间】:2019-02-02 12:39:42
【问题描述】:

我在使用以下参数创建函数时遇到了一些问题:

Ndata = extperiod(data, year, month,time)

数据是一个3列的表格,从左到右分别是:

year/month/date,   time,   temperature

我的目标是创建一个函数,它可以提取时间和年/月,与日期无关,并找到它对应的温度。

  • 我需要避免使用for 循环
  • 有人建议我使用floorfind,其中floor(YYYYMMDD/100) = YYYY*100 + MM,我想以某种方式将它们集成到我的功能中。

我之前找到了一种从数据中提取给定日期的所有温度的方法,如下所示:

k = find(data(:,1)==19750101);    
data(k(1):k(end),3)

我正在尝试合并此方法,但我认为提示“floor(YYYYMMDD/100)”让我有点失望。

我尝试过使用find(data(:,1)==floor(YYYYMMDD/100)),我认为我会得到具有特定年份和月份的所有日期。例如:

find( data(:,1) == floor(19660101/100) )

我认为这会给我列向量中值为 196601 的所有点。但事实并非如此。

我可以尝试什么不同的方法?

【问题讨论】:

  • 从使用for 循环开始!它们很容易掌握,您可以编写有效的代码。然后,您可以向我们展示一些代码作为minimal reproducible example,其中包含您的数据表的子集、预期输入和相应的预期输出。向量化现有代码以删除 for 循环然后是最后的语义。除非这是为了作业(在这种情况下,您可能会得到同学/主管的帮助),否则没有理由过早地避免循环。

标签: matlab function datetime filtering vectorization


【解决方案1】:

根据您的解释,您希望获取给定月份的所有温度,无论时间和日期如何。

因此,在选择 12 月的情况下,您希望查找包含在 [YYYYMM ; YYYY{MM+1}[[YYYYMM ; {YYYY+1}01[ 范围内的日期。 回想一下,您将完整的日期存储在表中。因此,您需要将运算符floor 应用于查询的两侧,而不仅仅是查询值,因为没有日期是floor(YYYYMMDD/100)

因此,请尝试以下操作:

find( floor(data(:,1)/100) == floor(19660101/100) )

【讨论】:

  • 你完全正确,我现在明白为什么find( data(:,1) == floor(19660101/100) ) 不起作用了。因为我的数据文件中没有格式为 YYYYMM 的日期。现在我只需要在一个月的所有日子里找到一个特定的时间,但这给了我很好的基础。谢谢你。你介意我用这篇文章来查询这个问题吗?
  • @JonnyCola 如果您有后续问题,最好是提出一个新问题(当然,如果您在 SO 上还没有找到答案!)。
猜你喜欢
  • 1970-01-01
  • 2021-09-12
  • 2023-03-15
  • 1970-01-01
  • 2022-08-03
  • 1970-01-01
  • 1970-01-01
  • 2017-12-15
  • 1970-01-01
相关资源
最近更新 更多