I would like not to use the non-tuple sequence for multidimensional indexing so that the script will support future release of Python when this changes.
Below is the
I can reproduce the warning with:
In [313]: x = np.zeros((4,2))
In [315]: x[:,1]
Out[315]: array([0., 0., 0., 0.])
By replacing the :
with a slice(None)
we can write this indexing as:
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.])
It really should be a tuple, rather than a list:
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.])
The warning tells us that the list format used to be ok, but will in the future produce an error.
I don't see anything your code that does this sort of slice in a list indexing.
data
from genfromtxt
is a structured array, so indexing by field name is normal: data["column_1"]
. So it's likely that the warning is generated within the plot
code. But we don't have any clue as to where. The warning doesn't give any sort of error stack trace, do it?
So without a sample array like data
, or a csv file like Example.csv
, we can't reproduce the warning, and dig further.
For a start I'd put some sort of print
between each of your code lines. The goal is to pin down which matplotlib
call is producing the warning.
If for example it is produced in
host.set_xlim([data["column_1"][0], data["column_1"][-1]])
I might try changing that call to
host.set_xlim((data["column_1"][0], data["column_1"][-1]))
or
host.set_xlim(data["column_1"][0], data["column_1"][-1])
That's a bit of wild guess...
FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated use `arr[tuple(seq)]`
This latest SO, helps us identify a problem function in the scipy.stats
package. It constructs a list of slices, and uses it without further conversion to tuple.
I would have tested this before posting (well, I did test it for areas where I was having the same problem), but I suspect that this will help you. Using your first line where you call a plot above, use tuple type casting as I've shown and do the same to your other lines calling plot.
p1, = host.plot(tuple(data["column_1"]),
tuple(data["column_2"]),
"b-", label="column_2")
When I studied numpy methods of indexing, the warning made a little more sense. However, I don't really understand why things need to go this way.
Upadating Scipy fixed this problem in my case. Cause the Scipy.stats class was deprecated.