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

Я бы не хотел использовать последовательность, не состоящую из кортежей, для многомерной индексации, чтобы сценарий поддерживал будущий выпуск 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())

Ответы [ 3 ]

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

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

p1, = host.plot(tuple(data["column_1"]), 
                tuple(data["column_2"]), 
                "b-", label="column_2")

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

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

Upadating Scipy исправил эту проблему в моем случае. Причина: класс Scipy.stats устарел.

0 голосов
/ 31 августа 2018

Я могу воспроизвести предупреждение с:

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, или CSV-файла, например Example.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. Он создает список фрагментов и использует его без дальнейшего преобразования в кортеж.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...