FutureWarning:不推荐使用非元组序列进行多维索引使用 \`arr\[tuple(seq)\]\` 而不是 \`arr\[seq\]\`

新手上路,请多包涵

我不想将非元组序列用于多维索引,以便脚本在发生变化时支持 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())

原文由 yajant b 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 539
1 个回答

我可以重现警告:

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

这是一个有点疯狂的猜测……

编辑

FutureWarning:不推荐使用非元组序列进行多维索引使用`arr[tuple(seq)]`

这个最新的 SO 帮助我们识别 scipy.stats 包中的问题函数。它构造一个切片列表,并在不进一步转换为元组的情况下使用它。

原文由 hpaulj 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题