ある配列に含まれる任意の配列をみつける

find numpy array in other numpy array – StackOverflow

頻繁に使用していると,「skimage.util.shape.view_as_windows」よりも
「numpy.lib.stride_tricks.as_strided」の方が分かり易い気がしてくる.

import numpy as np
from skimage.util.shape import view_as_windows


def slided_view(arr, N=2, S=1):
    s = arr.strides[0]
    nrows = (arr.size-N) // S + 1
    strided = np.lib.stride_tricks.as_strided
    return strided(arr, shape=(nrows, N), strides=(S*s, s))


a = np.array([1, 1])
b = np.array([2, 3, 3, 1, 1, 1, 8, 3, 1, 6, 0, 1, 1, 3, 4])

b2D1 = slided_view(b)
res1 = np.flatnonzero((b2D1==a).all(1))
print(res1)
%timeit b2D1 = slided_view(b);res1 = np.flatnonzero((b2D1==a).all(1))

b2D2 = view_as_windows(b, len(a))
res2 = np.flatnonzero((b2D2==a).all(1))
print(res2)
%timeit b2D2 = view_as_windows(b, len(a));res2 = np.flatnonzero((b2D2==a).all(1))
[ 3  4 11]
100000 loops, best of 3: 14.1 µs per loop
[ 3  4 11]
10000 loops, best of 3: 45.7 µs per loop
slided_view(b, 3)
array([[2, 3, 3],
       [3, 3, 1],
       [3, 1, 1],
       [1, 1, 1],
       [1, 1, 8],
       [1, 8, 3],
       [8, 3, 1],
       [3, 1, 6],
       [1, 6, 0],
       [6, 0, 1],
       [0, 1, 1],
       [1, 1, 3],
       [1, 3, 4]])
slided_view(b, 3, 2)
array([[2, 3, 3],
       [3, 1, 1],
       [1, 1, 8],
       [8, 3, 1],
       [1, 6, 0],
       [0, 1, 1],
       [1, 3, 4]])
広告
カテゴリー: 未分類 パーマリンク

ある配列に含まれる任意の配列をみつける への2件のフィードバック

  1. ピンバック: ある配列から別の1次元numpyアレイの要素の出現数を調べる – 配列aについて配列bの要素をカウント | 粉末@それは風のように (日記)

  2. ピンバック: Numpyでrolling windowを適用する様な処理 | 粉末@それは風のように (日記)

コメントを残す

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

WordPress.com ロゴ

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

Google フォト

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

Twitter 画像

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

Facebook の写真

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

%s と連携中