我不想在多维索引中使用非元组序列,以便该脚本在更改时将支持将来的Python版本。
以下是我用于绘制图形的代码:
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())
答案 0 :(得分:11)
我可以通过以下方式重现警告:
In [313]: x = np.zeros((4,2))
In [315]: x[:,1]
Out[315]: array([0., 0., 0., 0.])
通过将:
替换为slice(None)
,我们可以将该索引编写为:
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.])
它确实应该是一个元组,而不是列表:
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.])
该警告告诉我们列表格式过去还可以,但是将来会产生错误。
在列表索引中看不到任何执行这种切片的代码。
data
中的 genfromtxt
是结构化数组,因此按字段名称索引是正常的:data["column_1"]
。因此,很可能在plot
代码内生成了警告。但是我们没有任何线索。警告没有给出任何类型的错误堆栈跟踪,对吗?
因此,如果没有诸如data
这样的示例数组或诸如Example.csv
这样的csv文件,我们将无法重现警告并进一步挖掘。
首先,我将在每条代码行之间放置某种print
。目的是确定哪个matplotlib
调用会产生警告。
例如,如果它是在
中生产的host.set_xlim([data["column_1"][0], data["column_1"][-1]])
我可以尝试将通话更改为
host.set_xlim((data["column_1"][0], data["column_1"][-1]))
或
host.set_xlim(data["column_1"][0], data["column_1"][-1])
这有点疯狂的猜测...
最新的解决方案可帮助我们在scipy.stats
包中识别问题功能。它构造了一个切片列表,并且无需进一步转换为元组就可以使用它。
答案 1 :(得分:6)
在发布之前,我会对此进行测试(好吧,我确实对存在相同问题的区域进行了测试),但是我怀疑这会对您有所帮助。使用您在上面调用图的第一行,使用我已显示的元组类型转换,对其他调用图的行进行相同的操作。
p1, = host.plot(tuple(data["column_1"]),
tuple(data["column_2"]),
"b-", label="column_2")
当我研究numpy的索引编制方法时,该警告更加有意义。但是,我并不真正理解为什么事情需要这样发展。
答案 2 :(得分:3)
在我的案例中,Upadating Scipy解决了此问题。原因不推荐使用Scipy.stats类。