TypeError: l’oggetto ‘numpy.uint32’ non è iterabile nell’uso della funzione numpy.full

in alcune righe all’interno di un enorme script python, c’è una matrice 3d di 74537000 elementi che sono tutti i numeri float:

import numpy as np
prop_shape = [74537000, 3]  # to produce this however a long script is written and this will be printed (just before the controversial line below) in the first run of the code assuming it's a vector quantity like position.
prop_in_dtype = np.float32  # position array with the shape (74537000, 3) is made up of float32 values. In general, however, prop_in_dtype is changing across the script due to the nature of the array

quando stiamo cercando di fare un array identico i cui elementi sono tutti -1, possiamo usare numpy come segue:

.
.
.
my_array = np.full(tuple(prop_shape), -1, prop_in_dtype)
.
.
.

durante l’esecuzione di questo, ho il seguente messaggio di errore:

Traceback (most recent call last):
  File "DLA_DM.py", line 19, in <module>
    settings_centroid.init()
  File "/usr5/username/settings_centroid.py", line 43, in init
    part=gizmo.io.Read.read_snapshots(species, snapshot_value_kind, snapshot_number, simulation_directory='.', snapshot_directory='output/', simulation_name='', properties=properties, element_indices=None, particle_subsample_factor=0, separate_dark_lowres=True, sort_dark_by_id=False, convert_float32=True, host_number=1, assign_host_coordinates=True, assign_host_principal_axes=False, assign_host_orbits=False, assign_formation_coordinates=False, assign_pointers=False, check_properties=True)
  File "/usr5/username/simulation/gizmo/gizmo_io.py", line 649, in read_snapshots
    element_indices, convert_float32, header)
  File "/usr5/username/simulation/gizmo/gizmo_io.py", line 1164, in read_particles
    part[spec_name][prop] = np.full(tuple(prop_shape), - 1, prop_in_dtype) 
TypeError: 'numpy.uint32' object is not iterable

EN From: TypeError: ‘numpy.uint32’ object is not iterable in using numpy.full function

More similar articles:

12 Comments

  1. eh? eh? Lei ha aggiunto una stampa dopo una linea che genera un’eccezione, e sta sostenendo di mostrare l’uscita da quella stampa – come poteva questo forse essere vero, a causa dell’eccezione sulla linea precedente?

  2. posso riprodurre il messaggio di errore con:

    In [174]: tuple(np.uint32(1))                                                        
    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    <ipython-input-174-3420675a1788> in <module>
    ----> 1 tuple(np.uint32(1))
    
    TypeError: 'numpy.uint32' object is not iterable

    quindi la mia ipotesi è che c’è qualcosa di sbagliato con la variabile prop_shape.

    1. test tuple(prop_shape) da solo. il fatto che si ottiene lo stesso errore quando si cambia la chiamata sparse a full è un’ulteriore prova che il problema è con tale tuple argomento funzione.

  3. sarà molto più facile per qualcuno aiutare se si fornisce un esempio minimo riproducibile. probabilmente non hai bisogno di usare il tuo grande array nell’esempio. si dovrebbe essere in grado di riprodurre il problema con un array con forma, ad esempio, (5, 3).

  4. inoltre, quando si ottiene questo problema risolto, si esegue rapidamente in un altro: non è possibile sottrarre uno scalar diverso da zero da un dia_matrix. se si tenta, si otterrà l’errore NotImplementedError: subtracting a nonzero scalar from a sparse matrix is not supported. se hai davvero bisogno di un array pieno di -1, usa un array numpy regolare.

  5. inizialmente avevo usato numpy.zeros invece di scipy.sparse.dia _ matrix. tuttavia, a causa di MemoryError si lamentano, Ho dovuto cambiare la mia metodologia data l’enorme spazio RAM necessaria per eseguire i calcoli generali.

  6. a dia_matrix che è pieno del valore -1 richiederà più memoria di un array numpy regolare. matrici sparse sono utili quando la maggior parte dei valori nella matrice sono 0.

  7. prop_shape è iterare nel codice originale. a volte è un singolo numero intero (per quantità scalari ad esempio 74537000) e talvolta una lista a due elementi (per quantità vettoriali, ad esempio [74537000, 3]). stavo presupponendo che è fissato per essere una lista dei due elementi (quindi un vettore). ecco perché tuple di un singolo scalar darebbe tale errore se lo scalar non è un float32 dtype. per evitare questo, ho fatto un if statement dove ogni volta che controlla per il dtype della variabile prima di effettuare l’array:

    if isinstance(prop_shape, np.float32):
        my_array = np.full(tuple(prop_shape), -1, prop_in_dtype)
    else:
        my_array = np.full(prop_shape, -1, prop_in_dtype)

    tuttavia, come ho detto nel mio commento al suggerimento di Warren, Ho finito con un MemoryError come segue:

    Traceback (most recent call last):
      File "DLA_DM.py", line 96, in <module>
        gizmo.plot.Image.plot_image(settings_centroid.part, 'dark', 'mass', settings_centroid.image_kind, [0,1], settings_centroid.dimensions_select, settings_centroid.distance_max, settings_centroid.distance_bin_width_generic, distance_bin_number=settings_centroid.distance_bin_number, part_indices=part_indices, write_plot=write_plot, plot_directory=plot_directory, background_color=background_color, use_column_units=False, center_position=settings_centroid.center_position, rotation=settings_centroid.rotation, property_select={'mass.bound':[1e9,1e13]}, subsample_factor=subsample_factor, image_limits=settings_centroid.image_limits_xy, hal=settings_centroid.hal, hal_indices=settings_centroid.hal_indices, hal_position_kind=hal_position_kind, hal_radius_kind=hal_radius_kind, return_halo_info=settings_centroid.return_halo_info_value_dark)
      File "/usr5/username/simulation/gizmo/gizmo_plot.py", line 825, in plot_image
        settings_centroid.init()
      File "/usr5/username/settings_centroid.py", line 43, in init
        part=gizmo.io.Read.read_snapshots(species, snapshot_value_kind, snapshot_number, simulation_directory='.', snapshot_directory='output/', simulation_name='', properties=properties, element_indices=None, particle_subsample_factor=0, separate_dark_lowres=True, sort_dark_by_id=False, convert_float32=True, host_number=1, assign_host_coordinates=True, assign_host_principal_axes=False, assign_host_orbits=False, assign_formation_coordinates=False, assign_pointers=False, check_properties=True)
      File "/usr5/username/simulation/gizmo/gizmo_io.py", line 649, in read_snapshots
        element_indices, convert_float32, header)
      File "/usr5/username/simulation/gizmo/gizmo_io.py", line 1171, in read_particles
        part[spec_name][prop] = np.full(prop_shape, -1, prop_in_dtype)
      File "/usr/local/anaconda3/lib/python3.5/site-packages/numpy/core/numeric.py", line 309, in full
        a = empty(shape, dtype, order)
    MemoryError

Leave a Reply

Your email address will not be published. Required fields are marked *