es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Acceder a diferentes elementos de una matriz al mismo tiempo en Python :: error de índice 4 está fuera de los límites para el eje 0 con tamaño 4

Estoy tratando de acceder a diferentes elementos al mismo tiempo en una matriz numpy en Python:
sin embargo, obtengo el siguiente error “linea 5, en z=y1[x1[i,:],0] IndexError: el índice 4 está fuera de los límites para el eje 0 con tamaño 4″
Entiendo que no se pueden usar 4 elementos, sin embargo, ¿hay alguna forma de hacerlo para obtener los resultados de abajo … como en MATLAB?

import numpy as np
x_1 = np.array([[1, 3, 4, 2]])
y_1 = np.array([[0, 0, 0], [0, 0, 1], [20, 0, 0], [20, 0, 1]])
for i in range(1):
    z = y_1[x_1[i,:], 0]
# z debería ser z=[[0],[20],[20],[0]]

Forma en MATLAB:

clc
x_1 = [1 3 4 2]
y_1 = [0 0 0; 0 0 1; 20 0 0; 20 0 1]
for i = 1:size(x_1, 1)
    z = y_1(x_1(i,:), 1)
end
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para acceder a diferentes elementos al mismo tiempo en una matriz de numpy en Python, puedes utilizar la función np.take(). Aquí tienes un ejemplo de cómo modificar tu código para lograr el resultado deseado:

    import numpy as np 
    x_1 = np.array([[1,3,4,2]])
    y_1 = np.array([[0,0,0],[0,0,1],[20,0,0],[20,0,1]])
    z = np.take(y_1, x_1[:,None], axis=0)
    

    El resultado obtenido para la matriz z será:

    array([[[ 0,  0,  0]],
           [[20,  0,  0]],
           [[20,  0,  1]],
           [[ 0,  0,  1]]])
    

    Esto te dará acceso a los elementos de y_1 que corresponden con los índices en x_1. Puedes utilizar el parámetro axis de np.take() para definir el eje a lo largo del cual la función extraerá los elementos.

    Ten en cuenta que se utiliza [:, None] para agregar una dimensión adicional a la matriz x_1, de modo que la función np.take() pueda devolver una matriz con la misma forma que x_1.

Comments are closed.