У меня есть массив и логический массив (как одна горячая кодировка)
a = np.arange(12).reshape(4,3)
b = np.array([
[1,0,0],
[0,1,0],
[0,0,1],
[0,0,1],
], dtype=bool)
print(a)
print(b)
# [[ 0 1 2]
# [ 3 4 5]
# [ 6 7 8]
# [ 9 10 11]]
# [[ True False False]
# [False True False]
# [False False True]
# [False False True]]
И я бы хотел выбрать элементы, используя логический массив
print(a[:, [True, False, False]])
# array([[0],
# [3],
# [6],
# [9]])
print(a[:, [False, True, False]])
# array([[ 1],
# [ 4],
# [ 7],
# [10]])
Но этот выбор выбирается на основе одного и того же логического шаблона для всех строк. Я хотел бы выполнить это для каждой строки:
print(a[:, b])
# IndexError: too many indices for array
Что я должен вставить в ...
, чтобы я получил:
print(a[:, ...])
# array([[0],
# [4],
# [8],
# [11]])
РЕДАКТИРОВАТЬ: Это аналогично тому, что использовалось в печально известном CS231 курс:
dscores = a
num_examples = 4
# They had 300
y = b
dscores[range(num_examples),y]
# equivalent to
# a{:,b]
РЕДАКТИРОВАТЬ 2: В примере CS231 , y
является одномерным, а не горячим кодированием!
Они делали dscores[[rowIdx],[columnIdx]]