任意のアレイについて別のアレイに基づいて値をインクリメント(指定された間隔内で等間隔の値を生成)

Increment and insert values based on a specific value of another array – StackOverflow

「get_ranges_arr」関数を用いると簡単に処理できる.
(任意の始点/終点を指定してarangeの様に動作する関数;開始インデックスと終了インデックスを表す2つのnumpy.ndarrayから範囲を求めて,連続する値を求める関数)

この問題にフィーチャーした関数では無いが,汎用性が高い.

import numpy as np


def get_ranges_arr(s, e, dt=1, endpoint=True, dtype=int):
    if endpoint: e = e + 1
    v = np.ceil((e - s)/dt).astype(dtype).cumsum(0)
    out = np.ones(v[-1], dtype=dtype) * dt
    out[0] = s[0]
    out[v[:-1]] = s[1:] - e[:-1] + 1
    return out.cumsum(0)


a = np.array([0,2,9,12,18,19])
b = np.array([1,1,1,2,1,3])
c = a + b
result = get_ranges_arr(a, c, endpoint=False)
np.testing.assert_allclose(result, np.array([0,2,9,12,13,18,19,20,21]))
result
array([ 0,  2,  9, 12, 13, 18, 19, 20, 21])
カテゴリー: 未分類 パーマリンク

コメントを残す

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

WordPress.com ロゴ

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

Google フォト

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

Twitter 画像

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

Facebook の写真

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

%s と連携中

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