Então, eu crio uma matriz numpy:
a = np.arange(25).reshape(5,5)
matriz ([[0, 1, 2, 3, 4], [5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19] , [20, 21, 22, 23, 24]])
Uma fatia convencional a[1:3,1:3]
retorna
matriz ([[6, 7], [11, 12]])
assim como usar uma lista no segundo a[1:3,[1,2]]
matriz ([[6, 7], [11, 12]])
No entanto, a[[1,2],[1,2]]
retorna
matriz ([6, 12])
Obviamente não estou entendendo algo aqui. Dito isto, fatiar com uma lista pode ocasionalmente ser muito útil.
Felicidades,
keng
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?Respostas:
Você observou o efeito da chamada Indexação avançada . Vamos considerar o exemplo do link:
Você pode pensar nisso como fornecer listas de coordenadas (cartesianas) da grade, como
fonte
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]
ea[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:
Mas
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?)
"fonte
a[[1,2],[1,2]]
está lendo isso como, eu quero um [1,1] e um [2,2]. Existem algumas maneiras de contornar isso e eu provavelmente nem tenho as melhores, mas você pode tentarIsso fornecerá uma versão achatada acima
Isso fornecerá a fatia correta; funciona pegando as linhas [1,2] e depois as colunas [1,2].
fonte
Ele aciona a indexação avançada, de modo que a primeira fatia é o índice de linha, a segunda é o índice da coluna. Para cada linha, ele seleciona a coluna correspondente.
fonte