/ / Come creare una matrice nidificata in python - python, matrix, numpy, scipy

Come creare una matrice nidificata in python - python, matrix, numpy, scipy

Mi stavo chiedendo se fosse possibile creare una matrice nidificata in python. Qui definisco la mia matrice A

  A = array([[ 12.,   0.],[  0.,   4.]])

Vorrei sostituire gli zeri con una matrice 2x2 generica e quindi tracciare tutto con imshow(). È possibile?

Ho provato a definire la mia matrice nidificata in questo modo

  A = array([[ 12.,   array([[ 1.,   1.],[  1.,   1.]])],[  0.,   4.]])

ma ho ricevuto questo messaggio di errore

ValueError: impostazione di un elemento dell'array con una sequenza.

risposte:

2 per risposta № 1
>>> M = NP.empty((5, 5), dtype=NP.object)     # a 2D NumPy array
>>> M
array([[None, None, None, None, None],
[None, None, None, None, None],
[None, None, None, None, None],
[None, None, None, None, None],
[None, None, None, None, None]], dtype=object)

Ora puoi inserire sequenze, senza ottenere il ValueError

>>> M[2,2] = NP.array([4, 3, 5])
>>> M
array([[None, None, None, None, None],
[None, None, None, None, None],
[None, None, [4 3 5], None, None],
[None, None, None, None, None],
[None, None, None, None, None]], dtype=object)

>>> M[2,2]
array([4, 3, 5])

L'altra parte dell'OP - passando un array come questo a Matplotlib "s imshow, è un problema.

imshow</ Strong> rappresenta visivamente un array 2D come una nuvola dipunti posizionati sulla tela in base ai loro indici x, y. Il valore dell'indice viene indicato in base a colori e intensità di colore diversi in base a una mappa di colori che mappa il colore al valore dell'array. Pertanto, argomenti validi per imshow "s i parametri dei dati sono:

  • NumPy array 2D

Array NumPy di ​​dimensione superiore in due (e solo questi due AFAIK) che imshow può interpretare come

  • Array NumPy 2D di tuple rgb (x, y, r, b, g)

  • Array NumPy 6D, che sono interpretati come un array 2D di RGBA tuple (x, y, r, g, b, a)


0 per risposta № 2

Una matrice numpy ha un tipo di dati. Nella tua prima linea che crei A tale che:

import numpy as np
A = np.array([[ 12.,   0.],[  0.,   4.]])
A.dtype

stamperà dtype("float64"). Questo è tutto ciò che vuoi mettere dentro un array di questo tipo deve essere in grado di essere interpretato come float.

Nella tua seconda creazione di A questo è probabilmente il problema. Se invece lo fai:

A = np.array([[ 12.,   np.array([[ 1.,   1.],[  1.,   1.]])],[  0.,   4.]], dtype=np.object)

sarà creato, per quanto mi dispiace A ha la forma 2x2. Dovresti anche capire che gli array devono avere dimensioni regolari per tutte le dimensioni (non ci possono essere buchi negli array), cioè ogni posizione nell'array viene considerata come un singolo oggetto (alcuni dei quali sono array).

Ora non funzionerà ancora imshow dal momento che si aspetta un array 2D con elementi che possono essere interpretati come numeri e il tuo A[0,1], ad esempio, è un array stesso con dimensioni 2x2. Non può essere interpretato come un numero.

Quindi dovresti progettare il tuo array A in modo che sia un array 2D di float se vuoi mostrarlo come un'immagine con matplotlib.pyplot.imshow e capire come si desidera ottenere i dati in quella struttura.