NAN値をNAN値以外から後方カウントして埋める

backward count in a numpy array – StackOverflow

シンプルなのが一番.

import numpy as np


def backward_count(a):
    out = np.where(np.isnan(a), -1, a)
    return out.cumsum()


def backward_count2(a):
    ind = np.flatnonzero(~np.isnan(a))
    out = np.full_like(a, -1)
    out[ind] = a[ind]
    return out.cumsum()


nan = np.nan
arr = np.array([3, nan, nan, nan, 5, nan, nan, nan, nan, nan])
backward_count(arr), backward_count2(arr)
(array([3., 2., 1., 0., 5., 4., 3., 2., 1., 0.]),
 array([3., 2., 1., 0., 5., 4., 3., 2., 1., 0.]))
arr = np.tile(arr, 1_000_000)
%timeit backward_count(arr)
%timeit backward_count2(arr)
10 loops, best of 3: 83.3 ms per loop
10 loops, best of 3: 135 ms per loop
カテゴリー: 未分類 パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください