Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

221
Views
¿Cuándo se creará una nueva matriz cuando use el operador de división en Numpy?

Hoy, cuando usé el operador de división para modificar una matriz, descubrí que las siguientes operaciones obtuvieron resultados diferentes, aunque las operaciones parecían ser las mismas.

 import numpy as np a = np.array([[1,2,3],[0,5,4],[4,5,3],[5,8,7]]) print(a) a[[0,1],:][0:2,:] = [[11,12,13],[8,9,7]] print(a) a[0:2,:][[0,1],:] = [[11,12,13],[8,9,7]] print(a)

los resultados son los siguientes:

 [[1 2 3] [0 5 4] [4 5 3] [5 8 7]] [[1 2 3] [0 5 4] [4 5 3] [5 8 7]] [[11 12 13] [8 9 7] [4 5 3] [5 8 7]]

Supongo que "a[[0,1],:]" crea una nueva matriz y "a[0:2,:]" no. ¿Pero por qué? Estoy confundido. Quiero saber bajo qué condiciones se creará una nueva matriz cuando use el operador de división.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

a[[0,1],:] con una lista es "indexación avanzada". Hace una copia. El [0,1] no es un segmento.

a[0:2,:] con un segmento es "indexación básica". Devuelve una view .

a[[0,1],:][0:2,:] = ... intenta modificar esa copia y no afecta a a archivo . a[0:2,:][[0,1],:] = ... intenta modificar la view y, por lo tanto, también modifica a .

a[[0,1],:] = ... modificará con éxito a archivo .

Es una buena idea evitar la secuencia de indexación al establecer valores. a[...][...] = ... . Como muestra este ejemplo, a veces funciona, otras veces no. Si lo evita por completo, no tendrá que preocuparse por cuál funciona.

Incluso cuando se obtienen valores, la doble indexación es menos que ideal. Siempre funciona, pero puede ser más difícil de entender.

 a[0:2,:][[0,1],:] = [[11,12,13],[8,9,7]]

se evalúa como

 a.__getitem__((slice(0,2), slice(None))). __setitem__(([0,1], slice(None)), [[11,12,13],[8,9,7] )

El getitem se realiza primero y el setitem se aplica a ese resultado. Entonces, al encadenar la indexación, es crucial que comprenda lo que hace esa primera indexación.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!