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.

Convertir matriz numpy a archivo nifti 4D.

Estoy realizando simulaciones de un solo píxel en Python para generar señales simuladas con ruido añadido. Luego, quiero convertir la matriz resultante de numpy, con la siguiente forma (100, 100), en un archivo nifti.

Las filas representan una señal simulada bajo diferentes condiciones de ruido y rotación del tensor. Cada columna representa la intensidad de la señal correspondiente para ese píxel bajo esas condiciones cuando se mide con un esquema de muestreo específico (100 direcciones diferentes).

[Array de DWIs]

¡Enlace a la imagen 1!

No sé cómo asignar correctamente la matriz de numpy (DWIs.shape = (100,100)) al formato que deseo (10, 10, 1, 100):

data[…, ] = ?
 
converted_array = np.array(data, dtype=np.float32)
nifti_file = nib.Nifti1Image(converted_array, affine=np.eye(4))
nib.save(nifti_file, os.path.join(path_to_save, 'snr{}'.format(snr), 'full/dwi_sims_snr{}.nii.gz'.format(snr)))

Deseo guardar esta matriz en un archivo nifti con el siguiente formato (10, 10, 1, 100).

[Forma deseada]

¡Enlace a la imagen 2!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para asignar el array de numpy (DWIs.shape = (100, 100)) al formato deseado (10, 10, 1, 100), necesitamos cambiar la forma del array utilizando el método reshape. Así es cómo podemos hacerlo:

    import numpy as np
    import nibabel as nib
    
    # Suponiendo que 'DWIs' es un array de numpy de forma (100, 100)
    data = DWIs.reshape(10, 10, 1, 100)
    
    # Crear un archivo nifti usando el array con nueva forma
    converted_array = np.array(data, dtype=np.float32)
    nifti_file = nib.Nifti1Image(converted_array, affine=np.eye(4))
    nib.save(nifti_file, os.path.join(path_to_save, 'snr{}'.format(snr), 'full/dwi_sims_snr{}.nii.gz'.format(snr)))
    

    En el código anterior, primero cambiamos la forma del array DWIs utilizando el método reshape para darle la forma deseada de (10, 10, 1, 100).

    Luego, creamos un archivo nifti usando el array con la nueva forma. Convertimos el array al tipo de dato float32 y establecemos el parámetro affine como np.eye(4) para crear una matriz afín identidad. Finalmente, guardamos el archivo nifti en la ubicación deseada utilizando las funciones os.path.join y nib.save.

Comments are closed.