【发布时间】:2021-10-15 15:02:43
【问题描述】:
我认为我正在尝试做的事情在理论上应该很简单,但我就是不知道该怎么做。顺便说一句,在我开始之前,我应该先说我只允许自己使用scipy 和numpy。 (所以更重要的是我不允许使用pandas)
我有这个csv list 和列名'Latitude','Longitude','Time','Quantity'(只是一个sn-p,这个列表很大,有很多年),我想做的是每年找到最大的纬度。我很难区分每年最大的元素。这是我用于分隔列的代码
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 看到的地方,直到它再次不同。
【问题讨论】:
-
为什么不直接使用
max(lat)而不是 for 循环? -
因为那我只能得到最大纬度?我想要每年的最大纬度,澄清一下,“时间”列的格式如下“YYYY-MM-DDThh:mm:ss.000000Z”(不要问我为什么),我已经将年份提取到它自己的数组中,它只是给了我一个包含很多重复年份的列表,并且我已经为 lat 制作了另一个具有相同维度的数组(如果它有助于解决我的问题,我可以将它们组合起来)对应到那个日期的纬度。
-
您可以使用字典,其中年份是键,值是当前最大值,然后当您在 for 循环中迭代时,只需检查给定年份的当前值是否大于存储的字典中的值。然后在循环之后返回字典。
-
this 是我的尝试,正如您从 max(lat) 看到的那样,由于某种原因不起作用,我实际上不知道为什么?编辑:好的,我现在完全意识到 elif 语句需要返工,我只是通过这种方式获得重复的年份,但无论哪种方式,我眼中最重要的应该工作但不是?跨度>
-
当你做
year,lat=read_file(x)时,year和lat的值是多少?我的意思是它们的类型和含义是什么?看起来两者都是numpy数组。那么year[i]是一年吗,比如1999和lat[i]那一年的“纬度”?同一年会在year中出现多次吗?我假设是这样,因为您正在寻找最大值。我问这一切是因为下面@Fermi-4 答案的替代解决方案是划分每年的“纬度”值。然后你可以直接在每个单独的“lat”值列表上使用max()。