【发布时间】:2020-09-13 23:38:16
【问题描述】:
我正在尝试获取几年的数据并计算最近一年价值的百分位数。我最终使用的数组是一个 3D 数组 arr,其形状 (585, 1386, 3)=(lat, lon, year) 的值 erc。
array_list = []
data = 'erc_1979.nc'
files = sorted(glob.glob('erc_*'))
for x, f in enumerate(files):
nc = Dataset(data, mode = 'r')
erc = nc.variables['energy_release_component-g'][:]
nc.close()
array_list.append(erc)
arr = np.ma.concatenate(array_list, axis=0) #makes 3D array
###calculate percentiles
def f(x):
return percentileofscore(x, x[-1])
res = np.apply_along_axis(f, 0, arr)
【问题讨论】:
-
你的错误意味着你在位置参数之前提供了一个关键字参数,即
*args应该在**kwargs之前。添加要传递arr变量的参数名称,即arr_per = np.apply_along_axis(stats.percentileofscore(), axis=2, arr=arr) -
另外,当你将一个函数传递给另一个函数时,不要包含括号,或者你传递的是函数的结果,而不是函数本身。做
arr_per = np.apply_along_axis(stats.percentileofscore, axis=2, arr=arr) -
这修复了第一个错误,但我仍然有 percentileofscore 的参数问题...下一个错误是 TypeError: percentileofscore() missing 1 required positional argument: 'score'。我感到困惑的部分是如何将其编码为该切片的最后一个元素...
-
不是 100% 确定你想从你的问题中做什么 - 你能发布一个示例输入和预期输出吗?不必是完整的数组,只是一个子集
-
您是否要获取去年与前几年相比的百分位数?还是只取去年的值并正常化?