ΠΠΎΠΏΡΡΠΊΠ° ΠΏΡΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π΄Π²ΡΠΌΠ΅ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² ΡΠΎΡΠΌΡ [N, M] Ρ Π΄Π²ΡΠΌΡ ΠΎΠ΄Π½ΠΎΠΌΠ΅ΡΠ½ΡΠΌΠΈ Π±ΡΠ»Π΅Π²ΡΠΌΠΈ ΠΌΠ°ΡΠΊΠ°ΠΌΠΈ, ΡΠΎΡΠΌΠ°ΠΌΠΈ N ΠΈ M, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ 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,)
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,)
ΠΠ°, x[row_mask][:, col_mask]
- ΡΡΠΎ ΡΠΎ, ΡΠ΅ΠΌ Ρ Π·Π°ΠΊΠΎΠ½ΡΠΈΠ». Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅, Ρ ΡΠ°Π΄, ΡΡΠΎ ΡΡΠΈΠΌ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ.
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ arr[np.ix_(index)]
- ΡΡΠΎ ΡΠΎ, ΡΡΠΎ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ / ΠΎΠΆΠΈΠ΄Π°Π΅ΡΠ΅ Π·Π΄Π΅ΡΡ, ΠΈΠ»ΠΈ, Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΠΎ Π²Π½Π΅ΡΠ½Π΅ΠΉ Π»ΠΎΠ³ΠΈΠΊΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΈΠΈ, ΠΊΠ°ΠΊ Π² NEP 21: https://github.com/numpy/numpy/blob/master/doc/neps /nep-0021-advanced-indexing.rst
ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ, ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡΠ΄Ρ ΡΡΠΎ ΠΏΠΎΠ΄Ρ Π²Π°ΡΡΡ. Π NEP ΡΠ°ΠΊΠΆΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΡΡΡ, ΡΡΠΎ, ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, Π΄Π»Ρ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΏΡΠΎΡΡΠΎ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΌΠΈ (Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π²ΠΎΠΏΡΠΎΡ ΠΎ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΠΏΠΎΡΠ΅Π½ - ΠΎΠ½ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ ΠΈΠΌΠ΅ΡΡ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π·Π°ΠΏΡΡΠ°Π½Π½ΡΠΌ Π² Π»ΡΠ±ΠΎΠΉ ΡΠ»ΡΡΠ°ΠΉ).
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
Π ΡΠ»ΡΡΠ°Π΅ Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ ΠΊΠΎΠ΄ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ, ΡΡΠΎ Π²Ρ ΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ ΠΏΡΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π»ΠΈΠ±ΠΎ ΠΎΠ΄Π½ΠΎ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅, Π»ΠΈΠ±ΠΎ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ - Ρ Π²ΡΠ±ΠΎΡΠΎΠΌ, ΠΊ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΡΠ³Π°Π΄Π°Π΅ΠΌΡΠΌ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΄Π°Π»ΠΈΡΡ ΠΎΠ΄ΠΈΠ½
True
. Π’ΠΎ Π΅ΡΡΡ ΠΎΠ½ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅Ρ Π²Π°Ρrow_mask, col_mask
Π² Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠ°ΡΡΠΈΠ² (2,3), Π° Π·Π°ΡΠ΅ΠΌ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅Ρ, ΡΡΠΎ ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ² (3,3).ΠΡΡΠ°ΡΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΊΠΎΡΡΠ΅ΠΆΠΈ ΠΈ ΡΠΏΠΈΡΠΊΠΈ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΡΠ΅, ΠΎΡ ΡΠ΅Π³ΠΎ ΠΌΡ ΠΏΡΡΠ°Π΅ΠΌΡΡ ΠΎΡΠΊΠ°Π·Π°ΡΡΡΡ. Π ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ², Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°, ΡΠ±Π΅Π΄ΠΈΠ²ΡΠΈΡΡ, ΡΡΠΎ ΠΌΠ°ΡΠΊΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄Π²ΠΎΠΉΠ½ΡΠΌ ΡΠΏΠΈΡΠΊΠΎΠΌ.
ΠΠ΄Π½Π°ΠΊΠΎ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Ρ Π±ΠΎΡΡΡ, ΡΡΠΎ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ - ΡΠ΄Π΅Π»Π°ΡΡ
x[row_mask][:, col_mask]
.cc @ eric-wieser, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π±ΠΎΡΠ°Π» Π½Π°Π΄ ΠΎΡΠΊΠ°Π·ΠΎΠΌ ΠΎΡ Β«ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΊΠΎΡΡΠ΅ΠΆΠ° ΠΊΠ°ΠΊ ΡΠΏΠΈΡΠΊΠ°Β» Π΄Π»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΈΠΈ.
ps ΠΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΌΠ΅Π½Ρ ΡΠ°Π·Π΄ΡΠ°ΠΆΠ°Π΅Ρ ΡΡΠ° ΡΠ°Π·Π½ΠΈΡΠ°: