亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

基于時間片在 for 循環中創建新數組

基于時間片在 for 循環中創建新數組

至尊寶的傳說 2022-08-25 14:08:16
我有一個網格化數據集,其中緯度,經度,時間和溫度是變量。我想看看一些基于十年數據的分布。例如,假設我想看看上海和新加坡的一個地點。shanghai = temp.sel(latitude=31.25, longitude=121.5)singapore = temp.sel(latitude=1.25, longitude=103.75)現在我設置開始和結束日期。start_date1 = dt.datetime(1990,1,1)end_date1 = dt.datetime(1999,12,31)現在我想創建一個循環,這樣我就不必在切片兩個溫度數組時進行硬編碼。理想情況下,從 for 循環中吐出的是兩個新的數組,其中包含 20 世紀 90 年代的數據,其名稱類似于要創建的原始變量 + 。這是我所擁有的。shanghai90sshanghai90snames = [shanghai, singapore]for i in range(len(names)):    nine=names[i].sel(time=(slice(start_date1,end_date1)))但是,這只會創建一個包含最后一個變量的新數組(在本例中為 singapore)。我該如何解決這個問題?
查看完整描述

1 回答

?
紅糖糍粑

TA貢獻1815條經驗 獲得超6個贊

最好將所有城市數據保存在字典中,但一種快速的方法就是更新數組以僅包含所需的日期:


names = [shanghai, singapore]


for city in names:

    city=city.sel(time=(slice(start_date1,end_date1)))

字典方法會讓你提前做一些工作來設置坐標和幾十年,但隨后會讓你遍歷所有城市和幾十年,以建立一個包含你想要的所有數據的字典。它看起來像這樣:


import datetime as dt

cities = {

    "Shangai": {"coords": [31.25, 121.5]},

    "Singapore": {"coords": [1.25, 103.75]},

    "Other City": {"coords": [15.25, 85.25]}

}


decades = {

    "1990s": {"start": dt.datetime(1990,1,1), "end": dt.datetime(1999,12,31)},

    "2000s": {"start": dt.datetime(2000,1,1), "end": dt.datetime(2009,12,31)},

    "2010s": {"start": dt.datetime(2010,1,1), "end": dt.datetime(2019,12,31)}

}


for city, location in cities.items():

    data = temp.sel(latitude=location['coords'][0], longitude=location['coords'][1])

    for decade, dates in decades.items():

        cities[city][decade] = data.sel(time=(slice(dates['start'], dates['end'])))

然后,您可以像這樣訪問上海的90年代數據:


cities["Shangai"]["1990s"]

如果您熟悉字典和列表等基本數據結構,它真的會讓您的生活變得更加輕松。有很多很棒的教程。我建議這個用于字典,這個用于列表。

此外,為了跟上這個網站的精神,當你提出問題時,提供MWE是很好的禮儀。這是如何做到這一點


查看完整回答
反對 回復 2022-08-25
  • 1 回答
  • 0 關注
  • 109 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號