Advertencia futura: el uso de una secuencia que no sea de tuplas para la indexación multidimensional está en desuso, use `arr ` en lugar de `arr `

Me gustaría no usar la secuencia no tupla para la indexación multidimensional, de modo que la secuencia de comandos sea compatible con el lanzamiento futuro de Python cuando esto cambie.

A continuación se muestra el código que estoy usando para trazar el gráfico:

data = np.genfromtxt(Example.csv,delimiter=',', dtype=None, names=True, converters={0: str2date}) p1, = host.plot(data["column_1"], data["column_2"], "b-", label="column_2") p2, = par1.plot(data["column_1"], data['column_3'], "r-", label="column_3") p3, = par2.plot(data["column_1"], data["column_4"], "g-", label="column_4") host.set_xlim([data["column_1"][0], data["column_1"][-1]]) host.set_ylim(data["column_2"].min(), data["column_2"].max()) par1.set_ylim(data["column_3"].min(), data["column_3"].max()) par2.set_ylim(data["column_4"].min(), data["column_4"].max()) 

Puedo reproducir la advertencia con:

 In [313]: x = np.zeros((4,2)) In [315]: x[:,1] Out[315]: array([0., 0., 0., 0.]) 

Al reemplazar el : con un sector slice(None) podemos escribir esta indexación como:

 In [316]: x[[slice(None),1]] /usr/local/bin/ipython3:1: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result. #!/usr/bin/python3 Out[316]: array([0., 0., 0., 0.]) 

Realmente debería ser una tupla, en lugar de una lista:

 In [317]: x[(slice(None),1)] Out[317]: array([0., 0., 0., 0.]) In [318]: x[tuple([slice(None),1])] Out[318]: array([0., 0., 0., 0.]) 

La advertencia nos dice que el formato de lista solía estar bien, pero en el futuro producirá un error.

No veo nada de su código que hace este tipo de segmento en una lista de indexación.

data de genfromtxt son una matriz estructurada, por lo que la indexación por nombre de campo es normal: data["column_1"] . Por lo tanto, es probable que la advertencia se genere dentro del código de plot . Pero no tenemos ninguna pista de dónde. La advertencia no da ningún tipo de seguimiento de la stack de errores, ¿verdad?

Entonces, sin una matriz de muestra como data , o un archivo csv como Example.csv , no podemos reproducir la advertencia y seguir investigando.


Para empezar, pondría algún tipo de print entre cada una de sus líneas de código. El objective es determinar qué llamada de matplotlib está produciendo la advertencia.

Si por ejemplo se produce en

 host.set_xlim([data["column_1"][0], data["column_1"][-1]]) 

Podría intentar cambiar esa llamada a

 host.set_xlim((data["column_1"][0], data["column_1"][-1])) 

o

 host.set_xlim(data["column_1"][0], data["column_1"][-1]) 

Eso es un poco de conjetura salvaje …

editar

Advertencia futura: el uso de una secuencia que no sea de tuplas para la indexación multidimensional está en desuso, use `arr [tuple (seq)]`

Este último SO, nos ayuda a identificar una función de problema en el paquete scipy.stats . Construye una lista de cortes y la usa sin más conversión a tupla.

Habría probado esto antes de publicar (bueno, lo probé para las áreas donde tenía el mismo problema), pero sospecho que esto te ayudará. Usando su primera línea donde llama a un diagtwig de arriba, use la conversión de tipo tupla como he mostrado y haga lo mismo con sus otras líneas llamando a plot.

 p1, = host.plot(tuple(data["column_1"]), tuple(data["column_2"]), "b-", label="column_2") 

Cuando estudié varios métodos de indexación, la advertencia tuvo un poco más de sentido. Sin embargo, realmente no entiendo por qué las cosas deben ir de esta manera.

Upadating Scipy solucionó este problema en mi caso. Porque la clase Scipy.stats estaba en desuso.