[英]Add “nan” to numpy array 20 times without loop
Here is my code:这是我的代码:
import numpy as np
n = np.array([1.1,2.3,3.4])
for x in range(20):
n = np.append(n, [np.nan])
How can I add nan
to my numpy
array 20 times without a loop, only using numpy
's tools?如何仅使用
numpy
的工具在没有循环的情况下将nan
添加到我的numpy
数组中 20 次?
Thanks谢谢
n = np.append(n, np.repeat(np.nan, 20))
[Edit] Ok, it seems that use of np.repeat
is slower than use of np.zeros(20) + np.nan
like in Mr E's answer : [编辑] 好的,似乎使用
np.repeat
比使用np.zeros(20) + np.nan
就像E 先生的回答一样:
In [1]: timeit np.zeros(10000) + np.nan
100000 loops, best of 3: 16.1 µs per loop
In [2]: timeit np.repeat(np.nan, 10000)
10000 loops, best of 3: 70.8 µs per loop
But np.append
is quicker:但是
np.append
更快:
In [3]: timeit np.append(n, n)
100000 loops, best of 3: 5.56 µs per loop
In [4]: timeit np.hstack((n, n))
100000 loops, best of 3: 7.87 µs per loop
So you can combine both approaches:所以你可以结合这两种方法:
np.append(n, np.zeros(20) + np.nan)
This gives:这给出:
In [42]: timeit np.hstack((n, np.zeros(20) + np.nan))
100000 loops, best of 3: 13.2 µs per loop
In [43]: timeit np.append(n, np.repeat(np.nan, 20))
100000 loops, best of 3: 15.4 µs per loop
In [44]: timeit np.append(n, np.zeros(20) + np.nan)
100000 loops, best of 3: 10.5 µs per loop
n = np.hstack((n, np.zeros(20) + np.nan))
def rolling_window(a, window, method, backfill_method='nan'):
shape = a.shape[:-1] + (a.shape[-1] - window + 1, window)
strides = a.strides + (a.strides[-1],)
toReturn = np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)
if method == 'mean':
toReturn = np.mean(toReturn, 1)
elif method == 'std':
toReturn = np.std(toReturn, 1)
if backfill_method == 'nan':
first_valid = np.nan
elif backfill_method == 'first':
first_valid = toReturn[0]
return np.append(np.repeat(first_valid, len(a) - len(toReturn)), toReturn)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.