相关疑难解决方法(0)

快速numpy卷

我有一个2d numpy数组,我想以增量方式滚动每一行.我np.rollfor循环中使用这样做.但是因为我这几次打电话,我的代码真的很慢.你能帮我解决一下如何让它更快.

我的输入看起来像

array([[4,1],
       [0,2]])
Run Code Online (Sandbox Code Playgroud)

我的输出看起来像

array([[4,1],
       [2,0]])
Run Code Online (Sandbox Code Playgroud)

这里第0行[4,1]移动了0,第一行[0,2]移动了1.类似地,第二行将移动2,依此类推.

编辑

temp = np.zeros([dd,dd])
for i in range(min(t + 1, dd)):
    temp[i,:] = np.roll(y[i,:], i, axis=0)
Run Code Online (Sandbox Code Playgroud)

python arrays performance numpy

5
推荐指数
1
解决办法
2211
查看次数

滚动MAD的Numpy版本(平均绝对偏差)

如何制作以下MAD功能的滚动版本

from numpy import mean, absolute

def mad(data, axis=None):
    return mean(absolute(data - mean(data, axis)), axis)
Run Code Online (Sandbox Code Playgroud)

这段代码是这个问题的答案

目前我将numpy转换为pandas然后应用此函数,然后将结果转换回numpy

pandasDataFrame.rolling(window=90).apply(mad) 
Run Code Online (Sandbox Code Playgroud)

但是对于较大的数据帧,这是低效的.如何在没有循环的情况下获得numpy中相同函数的滚动窗口并给出相同的结果?

performance numpy vectorization pandas

3
推荐指数
1
解决办法
2489
查看次数

如何在Python中确定数字列表的趋势

有什么简单的方法可以找出列表的趋势吗?

例如:

  • [5.0, 6.0, 9.0, 4.0, 10.0]。总体而言,其元素随时间而增加。
  • [6.0, 4.0, 5.0, 4.0, 3.0]。随着时间的流逝,它的元素正在减少。

理想情况下,我希望从此类列表中获得布尔值结果。

实际上,我想知道数据收集的趋势。不是线性增加或正好一一增加。在现实世界中,某些数据并不总是那么好,也许有四分之一的数据不如以前那么好(但不是太差,也就不是太多),但是只要其趋势良好,就可以很好。

python algorithm list moving-average

2
推荐指数
1
解决办法
1239
查看次数

numpy 一维数组可以不连续吗?

是否可以在 numpy 中创建一个不是 C_CONTIGUOUS 或 F_CONTIGUOUS 的一维数组?

我认为连续的概念只对具有更多维度的数组有意义,但我在文档中找不到任何内容。

我尝试了以下方法来制作不连续的一维数组:

>>> np.empty(10).flags
  C_CONTIGUOUS : True
  F_CONTIGUOUS : True
  OWNDATA : True
  WRITEABLE : True
  ALIGNED : True
  WRITEBACKIFCOPY : False
  UPDATEIFCOPY : False
>>> np.empty(10).copy('F').flags
  C_CONTIGUOUS : True
  F_CONTIGUOUS : True
  OWNDATA : True
  WRITEABLE : True
  ALIGNED : True
  WRITEBACKIFCOPY : False
  UPDATEIFCOPY : False
Run Code Online (Sandbox Code Playgroud)

python arrays numpy memory-layout

2
推荐指数
1
解决办法
332
查看次数

Python - 如何平滑 xarray 图?

我有一些 NetCDF 文件,我需要从中绘制一些变量。我使用以下小代码来绘制我需要的数据:

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
%matplotlib inline
import xarray as xr
os.chdir
fname = "/home/data.nc"
ds = xr.open_dataset(fname)
ds['Evap_obs'].plot()
plt.show()
Run Code Online (Sandbox Code Playgroud)

其工作正常并产生下图:

在此输入图像描述

我现在的问题是这个情节不太可读。因此我希望事先平滑数据。为此我有这个小功能:

def mov_avg(x,window,min_count=None,axis=-1):
    import bottleneck as bn 
    yy=np.ma.filled(np.ma.fix_invalid(x),np.nan)
    yyF=np.ma.masked_all(yy.shape)
    xtmp=bn.move_mean(yy,window,min_count=min_count,axis=axis)
    wd1=(window-1)/2
    ndim = len(yy.shape)
   #print xtmp.shape,ndim,axis,window,wd1
    if ndim ==1 :
   #print wd1,-wd1,wd-1
        yyF[wd1:-wd1]=np.ma.fix_invalid(xtmp[window-1:])

    elif ndim == 2:
        if axis==-1 or axis==1:
            yyF[:,wd1:-wd1]=np.ma.fix_invalid(xtmp[:,window-1:])
        elif axis==0:
            yyF[wd1:-wd1,:]=np.ma.fix_invalid(xtmp[window-1:,:])

    return yyF
Run Code Online (Sandbox Code Playgroud)

然后,当我希望对我的数据运行此函数以使其平滑时,如下所示(使用 7 个时间步长的窗口进行平滑):

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
%matplotlib inline
import xarray as …
Run Code Online (Sandbox Code Playgroud)

python smoothing python-xarray

1
推荐指数
1
解决办法
2676
查看次数