簡體   English   中英

將“nan”添加到 numpy 數組 20 次而不循環

[英]Add “nan” to numpy array 20 times without loop

這是我的代碼:

import numpy as np
n = np.array([1.1,2.3,3.4])
for x in range(20):
    n = np.append(n, [np.nan])

如何僅使用numpy的工具在沒有循環的情況下將nan添加到我的numpy數組中 20 次?

謝謝

n = np.append(n, np.repeat(np.nan, 20))

[編輯] 好的,似乎使用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

但是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

所以你可以結合這兩種方法:

np.append(n, np.zeros(20) + np.nan)

這給出:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM