No último caso, as duas listas individuais são tratadas como operações de indexação separadas (este é um texto realmente estranho, por favor, tenha paciência comigo).
Numpy vê duas listas de dois números inteiros e decide que você está pedindo dois valores. O índice de linha de cada valor vem da primeira lista, enquanto o índice da coluna de cada valor vem da segunda lista. Portanto, você recebe a[1,1]
e a[2,2]
. A :
notação não apenas se expande para a lista que você deduziu com precisão, mas também indica que você deseja todas as linhas / colunas nesse intervalo.
Se você fornecer índices de lista com curadoria manual, eles deverão ter o mesmo tamanho, porque o tamanho de cada lista é o número de elementos que você receberá. Por exemplo, se você deseja os elementos nas colunas 1 e 2 das linhas 1,2,3:
>>> a[1:4,[1,2]]
array([[ 6, 7],
[11, 12],
[16, 17]])
Mas
>>> a[[1,2,3],[1,2]]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: shape mismatch: indexing arrays could not be broadcast together with shapes (3,) (2,)
O ex-diz numpy que você quer um intervalo de linhas e colunas específicas, enquanto o segundo diz "me os elementos a (1,1)
, (2,2)
e (3, hey! what the?! where's the other index?)
"
a[[1,2],[1,2]]
suposto dizera[[1:2],[1:2]]
? Existe um erro de digitaçãoa[1:3,[1,2]]
? Ou estou entendendo mal?