एक सरणी है जैसे:

x:
array([[[ 0,  1,  2,  3,  4],
        [ 5,  6,  7,  8,  9]],

       [[10, 11, 12, 13, 14],
        [15, 16, 17, 18, 19]],

       [[20, 21, 22, 23, 24],
        [25, 26, 27, 28, 29]],

       [[30, 31, 32, 33, 34],
        [35, 36, 37, 38, 39]],

       [[40, 41, 42, 43, 44],
        [45, 46, 47, 48, 49]],

       [[50, 51, 52, 53, 54],
        [55, 56, 57, 58, 59]],

       [[60, 61, 62, 63, 64],
        [65, 66, 67, 68, 69]],

       [[70, 71, 72, 73, 74],
        [75, 76, 77, 78, 79]],

       [[80, 81, 82, 83, 84],
        [85, 86, 87, 88, 89]],

       [[90, 91, 92, 93, 94],
        [95, 96, 97, 98, 99]]])

लक्ष्य प्रत्येक आइटम द्वारा i+3 आइटम द्वारा समूह है, और प्रत्येक समूह में शून्य अक्ष के सभी आइटम 30 से बड़े हैं।

आइटम I और i+3 को समूहीकृत करना:

for i in range(0,x.shape[0]-3):
    x[i:i+3]
    print()

array([[[ 0,  1,  2,  3,  4],
        [ 5,  6,  7,  8,  9]],

       [[10, 11, 12, 13, 14],
        [15, 16, 17, 18, 19]],

       [[20, 21, 22, 23, 24],
        [25, 26, 27, 28, 29]]])

array([[[10, 11, 12, 13, 14],
        [15, 16, 17, 18, 19]],

       [[20, 21, 22, 23, 24],
        [25, 26, 27, 28, 29]],

       [[30, 31, 32, 33, 34],
        [35, 36, 37, 38, 39]]])

array([[[20, 21, 22, 23, 24],
        [25, 26, 27, 28, 29]],

       [[30, 31, 32, 33, 34],
        [35, 36, 37, 38, 39]],

       [[40, 41, 42, 43, 44],
        [45, 46, 47, 48, 49]]])

array([[[30, 31, 32, 33, 34],
        [35, 36, 37, 38, 39]],

       [[40, 41, 42, 43, 44],
        [45, 46, 47, 48, 49]],

       [[50, 51, 52, 53, 54],
        [55, 56, 57, 58, 59]]])

array([[[40, 41, 42, 43, 44],
        [45, 46, 47, 48, 49]],

       [[50, 51, 52, 53, 54],
        [55, 56, 57, 58, 59]],

       [[60, 61, 62, 63, 64],
        [65, 66, 67, 68, 69]]])

array([[[50, 51, 52, 53, 54],
        [55, 56, 57, 58, 59]],

       [[60, 61, 62, 63, 64],
        [65, 66, 67, 68, 69]],

       [[70, 71, 72, 73, 74],
        [75, 76, 77, 78, 79]]])

array([[[60, 61, 62, 63, 64],
        [65, 66, 67, 68, 69]],

       [[70, 71, 72, 73, 74],
        [75, 76, 77, 78, 79]],

       [[80, 81, 82, 83, 84],
        [85, 86, 87, 88, 89]]])

और अंत में स्थिति की जाँच करें:

for i in range(0,x.shape[0]-3+1):
    (x[i:i+3] > 30).all(axis=0)
    print()


array([[False, False, False, False, False],
       [False, False, False, False, False]], dtype=bool)

array([[False, False, False, False, False],
       [False, False, False, False, False]], dtype=bool)

array([[False, False, False, False, False],
       [False, False, False, False, False]], dtype=bool)

array([[False,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True]], dtype=bool)

सवाल यह है: क्या लूप को हटाने का कोई तरीका है? बेहतर प्रदर्शन के लिए।

2
pd shah 31 मई 2017, 13:45

1 उत्तर

सबसे बढ़िया उत्तर

यहां np.lib.stride_tricks.as_strided का उपयोग करने का एक कारगर तरीका दिया गया है -

(strided_axis0(x,3)>30).all(1)

स्ट्राइड्स आधारित फ़ंक्शन strided_axis0 here से है।

3
Divakar 31 मई 2017, 13:57