FutureWarning: Использование последовательности без кортежей для многомерной индексации не рекомендуется использовать `arr [tuple (seq)]` - PullRequest
0 голосов
/ 01 октября 2018

Я искал S / O, но не смог найти ответ на этот вопрос.

Когда я пытаюсь построить график распространения, используя морского происхождения, я получаю предупреждение о будущем.Мне было интересно, в чем может быть проблема здесь.

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
% matplotlib inline
from sklearn import datasets

iris = datasets.load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['class'] = iris.target
df['species'] = df['class'].map({idx:s for idx, s in enumerate(iris.target_names)})


fig, ((ax1,ax2),(ax3,ax4))= plt.subplots(2,2, figsize =(13,9))
sns.distplot(a = df.iloc[:,0], ax=ax1)
sns.distplot(a = df.iloc[:,1], ax=ax2)
sns.distplot(a = df.iloc[:,2], ax=ax3)
sns.distplot(a = df.iloc[:,3], ax=ax4)
plt.show()

Это предупреждение:

C:\ProgramData\Anaconda3\lib\site-packages\scipy\stats\stats.py:1713:
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.
return np.add.reduce(sorted[indexer] * weights, axis=axis) / sumval

Любая помощь?Вы можете запустить приведенный выше код.Вы получите предупреждение.

Панды: 0.23.4, морское происхождение: 0.9.0, matplotlib: 2.2.3, scipy: 1.1.0, numpy: 1.15.0'

Ответы [ 4 ]

0 голосов
/ 24 февраля 2019

Я запустил seaborn.regplot и избавился от предупреждения, обновив scipy 1.2, как предложил NetworkMeister.

pip install --upgrade scipy --user

Если вы по-прежнему получаете предупреждения на других участках морского побережья, вы можете заранее выполнить следующее.Это полезно в Jupyter Notebook, потому что из-за предупреждений отчет выглядит плохо, даже если ваши графики великолепны.

import warnings
warnings.filterwarnings("ignore")
0 голосов
/ 31 октября 2018

Я столкнулся с тем же предупреждением.Я обновил scipy, pandas и numpy.Я все еще понимаю. Я получаю это, когда использую seaborn.pairplot с kde, который под ним использует seaborn.kdeplot.

Если вы хотите избавиться от предупреждения, вы можете использовать библиотеку предупреждений.Пример:

import warnings

with warnings.catch_warnings():

    your_code_block
0 голосов
/ 14 января 2019

Для python>=3.7 вам необходимо обновить scipy>=1.2.

0 голосов
/ 01 октября 2018

Полное отслеживание было бы неплохо.Я предполагаю, что seaborn.distplot использует scipy.stats для вычисления чего-либо.Ошибка возникает в

def _compute_qth_percentile(sorted, per, interpolation_method, axis):
    ....
    indexer = [slice(None)] * sorted.ndim
    ...
    indexer[axis] = slice(i, i + 2)
    ...
    return np.add.reduce(sorted[indexer] * weights, axis=axis) / sumval

Так что в этой последней строке список indexer используется для нарезки sorted.

In [81]: x = np.arange(12).reshape(3,4)
In [83]: indexer = [slice(None), slice(None,2)]
In [84]: x[indexer]
/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[84]: 
array([[0, 1],
       [4, 5],
       [8, 9]])
In [85]: x[tuple(indexer)]
Out[85]: 
array([[0, 1],
       [4, 5],
       [8, 9]])

Использование списка слайсов работает, ноПлан заключается в амортизации в будущем.Предполагается, что индексы, включающие несколько измерений, являются кортежами.Использование списков в контексте является устаревшим стилем, который постепенно прекращается.

Поэтому разработчикам scipy необходимо это исправить.Это не то, с чем должны сталкиваться конечные пользователи.Но пока не беспокойтесь о futurewarning.Это не влияет на расчеты или графики.Есть способ подавления предупреждений о будущем, но я не знаю его от руки.

FutureWarning: Использование последовательности без кортежей для многомерной индексации не рекомендуется использовать `arr [tuple (seq)]`вместо` arr [seq] `

...