FutureWarning:不建议使用非元组序列进行多维索引编制,而应使用`arr [tuple(seq)]`而非`arr [seq]` [英] FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated use `arr[tuple(seq)]` instead of `arr[seq]`

查看:919
本文介绍了FutureWarning:不建议使用非元组序列进行多维索引编制,而应使用`arr [tuple(seq)]`而非`arr [seq]`的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不想在多维索引中使用非元组序列,以便该脚本在更改时将支持将来的Python版本.

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 code that i am using for plotting the graph:

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())

推荐答案

我可以通过以下方式重现警告:

I can reproduce the warning with:

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

通过将:替换为slice(None),我们可以将该索引编写为:

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是结构化数组,因此按字段名称索引是正常的:data["column_1"].因此,很可能在plot代码内生成了警告.但是我们没有任何线索.警告没有给出任何类型的错误堆栈跟踪,对吗?

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?

因此,如果没有示例数组(如data)或csv文件(如Example.csv),我们将无法重现警告并进一步进行挖掘.

So without a sample array like data, or a csv file like Example.csv, we can't reproduce the warning, and dig further.

首先,我会在您的每条代码行之间放置某种print.目的是确定哪个matplotlib调用会产生警告.

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.

例如,如果它是在

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]))

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

这有点疯狂的猜测...

That's a bit of wild guess...

FutureWarning:使用非元组不建议使用`arr [tuple(seq)]`

最新的解决方案帮助我们识别scipy.stats程序包中的问题功能.它构造了一个切片列表,并且无需进一步转换为元组就可以使用它.

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.

这篇关于FutureWarning:不建议使用非元组序列进行多维索引编制,而应使用`arr [tuple(seq)]`而非`arr [seq]`的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆