我認為我想做的事情理論上應該很簡單,但我就是不知道該怎么做。順便說一句,在我開始之前,我應該以我只允許自己使用scipy和作為序言numpy。(因此,更重要的是,我沒有允許使用pandas)
我有這個帶有列名的csv 串列'Latitude','Longitude','Time','Quantity'(只是一個片段,串列很大,有很多年),我想做的是每年找到最大的緯度。我很難區分每年最大的元素。這是我用于分隔列的代碼
def read_file(x):
# Reads the file and returns the 4 columns of datapoints as lists.
data=np.genfromtxt(x, delimiter=',',usecols=range(4),dtype=None,unpack=True,names=True,encoding=None)
date,time=np.genfromtxt(data['Time'],delimiter='T',dtype=None,unpack=True,encoding=None)
year,month,day=np.genfromtxt(date,delimiter='-',dtype=None,unpack=True)
return year,data['Latitude']
# I'm just returning the important things for now
# but the plan is to use all of the data for later tasks
計劃是創建另一個函式,當當前元素與前一個元素相同時進行查找:
def max_per_year(x):
year,lat=read_file(x)
for i in range(len(year):
if year[i]==year[i-1]:
這就是我無法弄清楚如何讓它查看前一個is 直到它再次不同的地方。
uj5u.com熱心網友回復:
讓我們考慮一下這段代碼在做什么......
def max_per_year(x):
latdic={}
year,lat=read_file(x)
for i in range(len(year)):
if year[i]==year[i-1]:
if float(lat[i]) >=float(lat[i-1]):
latdic[str(year[i])]=lat[i]
elif year[i]!=year[i-1]:
latdic[str(year[i])]=lat[i]
return latdic, max(lat)
特別注意這個條件:if float(lat[i]) >=float(lat[i-1])- 這將做的是它會用前一個 lat 評估每個 lat,如果它更大,則替換當前的最大值。
因此,如果我有一個陣列,[10, 1, 2]那么當您需要的是 10 時,此邏輯將回傳 2 作為最大數。您需要做的是current max與前一個索引而不是前一個索引進行比較。
此外,您可以完全放棄年份比較,因為它只是鍵值對中的一個鍵。
想想看——[i-1]當你在陣列的開頭時會評估什么?
嘗試這樣的事情:
def max_per_year(x):
latdic={}
year,lat=read_file(x)
for i in range(len(year)):
# at least one entry exist for year[i]
if year[i] in latdic:
# an entry exists, now check if current entry is less than lat[i]
if latdic[year[i]] < lat[i]:
latdic[year[i]]=lat[i]
# no entry for year[i] key
else:
latdic[year[i]]=lat[i]
return latdic
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/322037.html
上一篇:重塑坐標串列
