Numpy: рдмрд╣реБ-рдЖрдпрд╛рдореА рдмреВрд▓рд┐рдпрди рдорд╛рд╕реНрдХ рдХреЗ рд╕рд╛рде рдкреНрд░рд╕рд╛рд░рдг рддреНрд░реБрдЯрд┐рдпрд╛рдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 3 рдЕрдкреНрд░реИрд▓ 2019  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: numpy/numpy

рджреЛ 1D рдмреВрд▓рд┐рдпрди рдорд╛рд╕реНрдХ, рдЖрдХрд╛рд░ N рдФрд░ M рдХреЗ рд╕рд╛рде рдЖрдХрд╛рд░ [N, M] рдХреЗ 2D рд╕рд░рдгреА рдХреЛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдкрд░, True рдФрд░ False рдХреЗ рдХреБрдЫ рд╕рдВрдпреЛрдЬрди рдкреНрд░рд╕рд╛рд░рдг рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдирддреЗ рд╣реИрдВ (рд╡рд┐рд╢реЗрд╖рдХрд░ рдЬрдм рдХреЛрдИ рдПрдХ рдЧрд▓рдд рд╣реЛ)ред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмреЗрд╣рдж рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдФрд░ рдЕрд╡рд╛рдВрдЫрд┐рдд рд▓рдЧрддрд╛ рд╣реИред

рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, x[[False, True, True], [True, True, True]] рддреНрд░реБрдЯрд┐рдпрд╛рдВ, рдЬрдмрдХрд┐ x[[False, True, True], True] рдФрд░ x[[False, True, True]] рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред

рдкреБрдирд░реБрддреНрдкрд╛рджрди рдХреЛрдб рдЙрджрд╛рд╣рд░рдг:

import numpy as np
from itertools import product

x = np.zeros((3,3))
mask_1d = [*product([True, False], repeat=3)]

for row_mask, col_mask in product(mask_1d, mask_1d):
    try:
        x[row_mask, col_mask]
    except IndexError as e:
        print(row_mask, col_mask)
        print(e)

рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢:

     (True, True, True) (True, True, False)
shape mismatch: indexing arrays could not be broadcast together with shapes (3,) (2,) 
(True, True, True) (True, False, True)
shape mismatch: indexing arrays could not be broadcast together with shapes (3,) (2,) 
(True, True, True) (False, True, True)
shape mismatch: indexing arrays could not be broadcast together with shapes (3,) (2,) 
(True, True, True) (False, False, False)
shape mismatch: indexing arrays could not be broadcast together with shapes (3,) (0,) 
(True, True, False) (True, True, True)
shape mismatch: indexing arrays could not be broadcast together with shapes (2,) (3,) 
(True, True, False) (False, False, False)
shape mismatch: indexing arrays could not be broadcast together with shapes (2,) (0,) 
(True, False, True) (True, True, True)
shape mismatch: indexing arrays could not be broadcast together with shapes (2,) (3,) 
(True, False, True) (False, False, False)
shape mismatch: indexing arrays could not be broadcast together with shapes (2,) (0,) 
(False, True, True) (True, True, True)
shape mismatch: indexing arrays could not be broadcast together with shapes (2,) (3,) 
(False, True, True) (False, False, False)
shape mismatch: indexing arrays could not be broadcast together with shapes (2,) (0,) 
(False, False, False) (True, True, True)
shape mismatch: indexing arrays could not be broadcast together with shapes (0,) (3,) 
(False, False, False) (True, True, False)
shape mismatch: indexing arrays could not be broadcast together with shapes (0,) (2,) 
(False, False, False) (True, False, True)
shape mismatch: indexing arrays could not be broadcast together with shapes (0,) (2,) 
(False, False, False) (False, True, True)
shape mismatch: indexing arrays could not be broadcast together with shapes (0,) (2,)

Numpy/рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рдирдХрд╛рд░реА:

1.16.2 3.6.8 |Anaconda, Inc.| (default, Dec 30 2018, 01:22:34) 
[GCC 7.3.0]

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдмреВрд▓рд┐рдпрди рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде, рдХреЛрдб рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдпрд╛ рддреЛ рдПрдХ рдЖрдпрд╛рдо True рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╛рдиреА, рдпрд╣ рдЖрдкрдХреЗ row_mask, col_mask рдХреЛ рдПрдХ (2,3) рдмреВрд▓рд┐рдпрди рд╕рд░рдгреА рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдкрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ (3,3) рд╕рд░рдгреА рдХреЛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЯреБрдкрд▓реНрд╕ рдФрд░ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рд╕рдордХрдХреНрд╖ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рджреВрд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЖрдЦрд┐рд░рдХрд╛рд░, рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдХреЗ рдмреВрд▓рд┐рдпрди рд╕рд░рдгреА рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреЛ рд╕рдВрднрд╛рд▓ рд▓реЗрдВрдЧреЗ рдХрд┐ рдореБрдЦреМрдЯрд╛ рдПрдХ рджреЛрд╣рд░реА рд╕реВрдЪреА рдереАред

рдЕрднреА рдХреЗ рд▓рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди x[row_mask][:, col_mask] ред

cc @ eric-wieser, рдЬреЛ рдЕрдиреБрдХреНрд░рдордг рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП "рдЯреНрд░реАрдЯ рдЯрдкрд▓ рдРрдЬрд╝ рд▓рд┐рд╕реНрдЯ" рдХреЛ рдкрджрд╛рд╡рдирдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

ps рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдХрд╖реНрдЯрдкреНрд░рдж рдореБрдЭреЗ рдпрд╣ рдЕрдВрддрд░ рдорд┐рд▓рддрд╛ рд╣реИ:

x = np.arange(9).reshape(3, 3)
# x[[False, True, True], True]
# array([[3, 4, 5],
#        [6, 7, 8]])
x[[False, True, True], False]
# IndexError: shape mismatch: indexing arrays could not be broadcast together with shapes (2,) (0,) 

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдмреВрд▓рд┐рдпрди рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде, рдХреЛрдб рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдпрд╛ рддреЛ рдПрдХ рдЖрдпрд╛рдо True рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╛рдиреА, рдпрд╣ рдЖрдкрдХреЗ row_mask, col_mask рдХреЛ рдПрдХ (2,3) рдмреВрд▓рд┐рдпрди рд╕рд░рдгреА рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдкрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ (3,3) рд╕рд░рдгреА рдХреЛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЯреБрдкрд▓реНрд╕ рдФрд░ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рд╕рдордХрдХреНрд╖ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рджреВрд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЖрдЦрд┐рд░рдХрд╛рд░, рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдХреЗ рдмреВрд▓рд┐рдпрди рд╕рд░рдгреА рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреЛ рд╕рдВрднрд╛рд▓ рд▓реЗрдВрдЧреЗ рдХрд┐ рдореБрдЦреМрдЯрд╛ рдПрдХ рджреЛрд╣рд░реА рд╕реВрдЪреА рдереАред

рдЕрднреА рдХреЗ рд▓рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди x[row_mask][:, col_mask] ред

cc @ eric-wieser, рдЬреЛ рдЕрдиреБрдХреНрд░рдордг рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП "рдЯреНрд░реАрдЯ рдЯрдкрд▓ рдРрдЬрд╝ рд▓рд┐рд╕реНрдЯ" рдХреЛ рдкрджрд╛рд╡рдирдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

ps рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдХрд╖реНрдЯрдкреНрд░рдж рдореБрдЭреЗ рдпрд╣ рдЕрдВрддрд░ рдорд┐рд▓рддрд╛ рд╣реИ:

x = np.arange(9).reshape(3, 3)
# x[[False, True, True], True]
# array([[3, 4, 5],
#        [6, 7, 8]])
x[[False, True, True], False]
# IndexError: shape mismatch: indexing arrays could not be broadcast together with shapes (2,) (0,) 

рд╣рд╛рдВ, x[row_mask][:, col_mask] рд╡рд╣реА рд╣реИ рдЬреЛ рдореИрдВ рдХрд░ рд░рд╣рд╛ рдерд╛ред рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЧреМрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ arr[np.ix_(index)] рд╡рд╣ рд╣реИ рдЬреЛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ/рдпрд╣рд╛рдВ рдЙрдореНрдореАрдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╛ рдмрд╛рд╣рд░реА рд╢рдмреНрджреЛрдВ рдореЗрдВ рдПрдирдИрдкреА 21 рдореЗрдВ рдмрд╛рд╣рд░реА рдЕрдиреБрдХреНрд░рдордг рддрд░реНрдХ рдкрд░: https://github.com/numpy/numpy/blob/master/doc/neps /nep-0021-advanced-indexing.rst

рд╢рд╛рдпрдж рдпрд╣ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЙрдард╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдПрдирдИрдкреА рдпрд╣ рднреА рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рд╡рд░реНрддрдорд╛рди рдЕрдиреБрдХреНрд░рдордг рдХреЗ рд▓рд┐рдП рдХрдИ рдмреВрд▓рд┐рдпрди рдЗрдВрдбреЗрдХреНрд╕ рдХреЛ рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдЕрднреА рднреА рдЪреБрдиреМрддреА рджреА рдЬрд╛ рд╕рдХрддреА рд╣реИ - рдпрд╣ рд╕реБрд╕рдВрдЧрдд рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рднреНрд░рдорд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ)ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

dmvianna picture dmvianna  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

'
Pezhvuk picture Pezhvuk  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

marcocaccin picture marcocaccin  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

amuresan picture amuresan  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ghost picture ghost  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ