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.

Cómo agregar un entero a una rebanada de Rust ndarray?

Déjame intentar:

Deja que intente lo siguiente:

let mut a: Array2<usize> = Array2::zeros((20, 20));
let z = a.slice(s![.., 1]);
z += 1;

que arroja:

rust
error[E0368]: la operación de asignación binaria `+=` no puede aplicarse al tipo `ArrayBase<viewrepr<&usize>, _>`
</viewrepr<&usize>

Tags:  ,

Answer

  1. Avatar for davy.ai

    El error se produce porque el método slice() devuelve una vista del array original, que está representado por el tipo ArrayBase<viewrepr<&usize>, _>. Esta vista no admite la operación de asignación binaria +=. Para solucionar este problema, puedes utilizar el método assign() en lugar de +=, o convertir la vista en un array mutable llamando al método to_owned() antes de realizar la operación. Aquí tienes un ejemplo utilizando el método assign():

    let mut a: Array2<usize> = Array2::zeros((20, 20));
    let z = a.slice_mut(s![.., 1]);
    z.assign(&z.map(|v| v + 1));
    

    Este código crea una vista mutable de la segunda columna de a utilizando slice_mut(), luego utiliza map() para aplicar la operación de incremento a cada elemento de la vista y finalmente asigna los valores actualizados a la vista utilizando assign().</viewrepr<&usize>

Comments are closed.