Esempio n. 1
0
def nanmean(a, axis=None, keepdims=None, *args, **kwargs):
    n = sp.nansum(a, axis=axis, keepdims=keepdims)
    d = sp.nansum(sp.nan_to_num(a) != 0, axis=axis,
                  keepdims=keepdims).astype(n.dtype)
    n = sp(data=n.data, coords=n.coords, fill_value=np.nan, shape=n.shape)
    d = sp(data=d.data, coords=d.coords, fill_value=np.nan, shape=d.shape)
    out = n / d
    return sp(data=out.data, coords=out.coords, fill_value=0, shape=out.shape)
def array(a, *args, **kwargs):
    if kwargs.get("fill_value", None) is not None:
        fill_value = kwargs.pop("fill_value")
    else:
        fill_value = sp.nan
    if type(a) == sp:
        return sp(a, *args, **kwargs, fill_value=fill_value)
    else:
        return sp(np.array(a, *args, **kwargs), fill_value=fill_value)
Esempio n. 3
0
def nanmean(a, axis=None, keepdims=None, *args, **kwargs):
    n = sp.nansum(a, axis=axis, keepdims=keepdims)
    d = sp.nansum(sp.nan_to_num(a)!=0, axis=axis, keepdims=keepdims).astype(n.dtype)
    n.fill_value=np.nan
    d.fill_value=np.nan
    n = sp(n)
    d = sp(d)
    out = n / d
    out.fill_value = 0
    return sp(out)
Esempio n. 4
0
def nan_to_num(a):
    if type(a) in [int, float, np.int64, np.float64]:
        return np.nan_to_num(a)
    if hasattr(a, "fill_value"):
        a = a.copy()
        a.data[np.isnan(a.data)] = 0.0
    return sp(coords=a.coords, data=a.data, fill_value=0.0, shape=a.shape)
Esempio n. 5
0
def cumfunc(a, axis, func):
    a = copy.deepcopy(a)
    ax = np.arange(a.ndim)
    axis = ax[axis]
    x = pd.DataFrame(a.coords.T)
    x.columns = ['0', '1', '2', '3']
    cols = [item for item in x.columns if item != str(axis)]
    x['y']=a.data
    x = pd.pivot_table(
        x , columns=cols,
        index=str(axis), values='y')
    missing = pd.Int64Index(
        set(np.arange(a.shape[axis])) - set(x.index), name=str(axis))
    if len(missing) > 0:
        x = x.append(pd.DataFrame(
            np.repeat((x.iloc[0:1]*0).values, len(missing), axis=0),
            index=missing, columns=x.columns))
    x = x.unstack().reset_index().fillna(0)
    x.columns = [item for item in x.columns[:-1]] + ['y']
    x = x.set_index(list(x.columns[:-1])).groupby(level=[0,1,2])
    if func == 'cumsum':
        x = x.cumsum().reset_index()
    if func == 'cumprod':
        x = x.cumprod().reset_index()
    x = x[x['y']!=0]
    a.coords = x[['0', '1', '2', '3']].values.T
    a.data = x['y'].values
    return sp(a)
def nanmedian(a, axis=None, keepdims=None, *args, **kwargs):
    new_a = np.nanmedian(a.todense(),
                         axis=axis,
                         keepdims=keepdims,
                         *args,
                         **kwargs)
    return sp(np.nan_to_num(new_a), fill_value=np.nan)
def nanquantile(a, q, axis=None, keepdims=None, *args, **kwargs):
    new_a = np.nanquantile(a.todense(),
                           q=q,
                           axis=axis,
                           keepdims=keepdims,
                           *args,
                           **kwargs)
    return sp(np.nan_to_num(new_a), fill_value=np.nan)
def nan_to_num(a):
    if type(a) in [int, float, np.int64, np.float64]:
        return np.nan_to_num(a)
    if hasattr(a, "fill_value"):
        a = a.copy()
        a.data[np.isnan(a.data)] = 0.0
        if a.fill_value != 0.0:
            a.fill_value = 0.0
    return sp(a)
Esempio n. 9
0
def swapaxes(a, axis1, axis2):
    ax = np.arange(a.ndim)
    axis1 = ax[axis1]
    axis2 = ax[axis2]
    fv = a.fill_value
    l = []
    for item in range(a.ndim):
        if item == axis1:
            l.append(axis2)
        elif item == axis2:
            l.append(axis1)
        else:
            l.append(item)
    coords = a.coords[l,:]
    return sp(coords, a.data, shape=tuple([a.shape[item] for item in l]),
              prune=True, fill_value=fv)
Esempio n. 10
0
def cumsum(a, axis):
    a = copy.deepcopy(a)
    x = pd.DataFrame(a.coords.T)
    x.columns = ['0', '1', '2', '3']
    cols = [item for item in x.columns if item != str(axis)]
    x['y'] = a.data
    x = pd.pivot_table(x, columns=cols, index=str(axis), values='y')
    missing = list(set(np.arange(a.shape[axis])) - set(x.index))
    if len(missing) > 0:
        x = x.append(
            pd.DataFrame(np.repeat((x.iloc[0:1] * 0).values,
                                   len(missing),
                                   axis=0),
                         index=missing,
                         columns=x.columns))
    x = x.unstack().reset_index().fillna(0)
    x.columns = [0, 1, 2, 3, 'y']
    x = x.set_index([0, 1, 2, 3]).groupby(level=2).cumsum().reset_index()
    x = x[x['y'] > 0]
    a.coords = x[[0, 1, 2, 3]].values.T
    a.data = x['y'].values
    return sp(a)
Esempio n. 11
0
def ones(*args, **kwargs):
    return sp(np.ones(*args, **kwargs), fill_value=sp.nan)
Esempio n. 12
0
def apply_along_axis(func1d, axis, arr, *args, **kwargs):
    fv = arr.fill_value
    arr = np.apply_along_axis(func1d, axis, arr.todense(), *args, **kwargs)
    return sp(arr, fill_value=fv)
Esempio n. 13
0
def around(a, *args, **kwargs):
    fv = a.fill_value
    a = np.around(a.todense(), *args, **kwargs)
    return sp(a, fill_value=fv)
Esempio n. 14
0
def unique(a, *args, **kwargs):
    fv = a.fill_value
    a = np.unique(a.todense(), *args, **kwargs)
    return sp(a, fill_value=fv)
Esempio n. 15
0
def array(*args, **kwargs):
    return sp(np.array(*args, **kwargs))
Esempio n. 16
0
def ones(*args, **kwargs):
    return sp(np.ones(*args, **kwargs))
Esempio n. 17
0
def nansum(a, axis=None, keepdims=None, *args, **kwargs):
    return sp(data=a.data, coords=a.coords, fill_value=0.0,
              shape=a.shape).sum(axis=axis, keepdims=keepdims, *args, **kwargs)