उदाहरण के लिए, यदि मेरे पास Numpy सरणियाँ हैं जो इसके द्वारा आरंभ की गई हैं:

a = np.arange(12).reshape(6,2)
[out] array([[ 0,  1],
             [ 2,  3],
             [ 4,  5],
             [ 6,  7],
             [ 8,  9],
             [10, 11]])

तथा

mask = np.array([0, 2])

मेरा लक्ष्य एक अक्ष में सीमा के आधार पर सरणी को मुखौटा करना है। इस तरह

for i in mask:
    target.append(a[i:i+3,:])

तो, यह होना चाहिए:

[out] array([[[0, 1],
              [2, 3],
              [4, 5]],

             [[4, 5],
              [6, 7],
              [8, 9]]])

लेकिन यह अक्षम है। फिर, मैंने कोशिश की है

a[mask:mask+3,:]

लेकिन यह कहा

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: only integer scalar arrays can be converted to a scalar index
2
doliolarzz 6 जुलाई 2018, 18:10

1 उत्तर

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

दृष्टिकोण #1

हम broadcasting का लाभ उठा सकते हैं सभी सूचकांक और सूचकांक उत्पन्न करने के लिए -

In [19]: a
Out[19]: 
array([[ 0,  1],
       [ 2,  3],
       [ 4,  5],
       [ 6,  7],
       [ 8,  9],
       [10, 11]])

In [21]: mask
Out[21]: array([0, 2])

In [24]: a[mask[:,None] + np.arange(3)]
Out[24]: 
array([[[0, 1],
        [2, 3],
        [4, 5]],

       [[4, 5],
        [6, 7],
        [8, 9]]])

दृष्टिकोण #2

हम np.lib.stride_tricks.as_strided आधारित < का भी लाभ उठा सकते हैं। a href="http://scikit-image.org/docs/dev/api/skimage.util.html#skimage.util.view_as_windows" rel="nofollow noreferrer">scikit-image's view_as_windows एक के लिए अधिक कुशल समाधान -

In [43]: from skimage.util.shape import view_as_windows

In [44]: view_as_windows(a,(3,a.shape[1]))[mask][:,0]
Out[44]: 
array([[[0, 1],
        [2, 3],
        [4, 5]],

       [[4, 5],
        [6, 7],
        [8, 9]]])
2
Divakar 6 जुलाई 2018, 18:22