У меня есть питон list
:
[[([1, 20230112060000], [10000, 20230112060000]),
([1, 20230108060000], [7000, 20230109060000]),
([3, 20221229060000], [6929, 20221229060000]),
([1, 20221227060000], [3900, 20221227060000]),
([1, 20221226060000], [6500, 20221226060000]),
([1, 20221221060000], [4400, 20221222060000]),
([1, 20221216060000], [3888, 20221216060000]),
([1, 20221205060000], [5998, 20221205060000]),
([1, 20221128060000], [5000, 20221128060000]),
([1, 20221127060000], [5000, 20221127060000]),
([1, 20221123060000], [5666, 20221123060000]),
([1, 20221122060000], [6000, 20221122060000]),
([1, 20221120060000], [4300, 20221120060000]),
([1, 20221118060000], [4998, 20221118060000]),
([1, 20221028050000], [2700, 20221028050000]),
([1, 20221027050000], [5000, 20221027050000]),
([1, 20221022050000], [4300, 20221022050000]),
([1, 20221019050000], [4498, 20221019050000]),
([1, 20221018050000], [3500, 20221018050000]),
([2, 20221015050000], [3899, 20221015050000]),
([1, 20221011050000], [4500, 20221011050000]),
([2, 20221008050000], [4850, 20221008050000]),
([2, 20221007050000], [5898, 20221007050000]),
([1, 20221004050000], [7499, 20221004050000]),
([1, 20221001050000], [3400, 20221001050000]),
...
[],
[([2, 20230206060000], [357500, 20230206060000])],
[([2, 20230206060000], [357500, 20230206060000]),
([6, 20230205060000], [353833, 20230205060000])],
...]
Но когда я пытаюсь преобразовать его в массив NumPy, происходит что-то странное:
import numpy as np
a = [...] # the above list
b = np.array(a)
b
:
array([list([([1, 20230112060000], [10000, 20230112060000]), ([1, 20230108060000], [7000, 20230109060000]), ([3, 20221229060000], [6929, 20221229060000]), ([1, 20221227060000], [3900, 20221227060000]), ([1, 20221226060000], [6500, 20221226060000]), ([1, 20221221060000], [4400, 20221222060000]), ([1, 20221216060000], [3888, 20221216060000]), ([1, 20221205060000], [5998, 20221205060000]), ([1, 20221128060000], [5000, 20221128060000]), ([1, 20221127060000], [5000, 20221127060000]), ([1, 20221123060000], [5666, 20221123060000]), ([1, 20221122060000], [6000, 20221122060000]), ([1, 20221120060000], [4300, 20221120060000]), ([1, 20221118060000], [4998, 20221118060000]), ([1, 20221028050000], [2700, 20221028050000]), ([1, 20221027050000], [5000, 20221027050000]), ([1, 20221022050000], [4300, 20221022050000]), ([1, 20221019050000], [4498, 20221019050000]), ([1, 20221018050000], [3500, 20221018050000]), ([2, 20221015050000], [3899, 20221015050000]), ([1, 20221011050000], [4500, 20221011050000]), ([2, 20221008050000], [4850, 20221008050000]), ([2, 20221007050000], [5898, 20221007050000]), ([1, 20221004050000], [7499, 20221004050000]), ([1, 20221001050000], [3400, 20221001050000]), ([1, 20220928050000], [5000, 20220929050000]), ([1, 20220926050000], [3000, 20220926050000]), ([1, 20220925050000], [4500, 20220925050000]), ([1, 20220922050000], [4000, 20220922050000]), ([1, 20220920050000], [5000, 20220920050000]), ([1, 20220916050000], [8000, 20220916050000]), ([2, 20220915050000], [6625, 20220915050000]), ([2, 20220914050000], [4500, 20220914050000]), ([1, 20220903050000], [10000, 20220903050000]), ([1, 20220821050000], [8600, 20220821050000]), ([2, 20220820050000], [37500, 20220820050000]), ([1, 20220819050000], [30000, 20220819050000]), ([2, 20220818050000], [13999, 20220818050000]), ([1, 20220816050000], [4000, 20220817050000]), ([1, 20220815050000], [4000, 20220815050000])]),
list([]), list([([1, 20230112060000], [10000, 20230112060000])]),
...,
list([([1, 20230123060000], [5745, 20230123060000]), ([1, 20230105060000], [13000, 20230105060000]), ([1, 20221228060000], [6000, 20221228060000]), ([2, 20221227060000], [6000, 20221227060000]), ([1, 20221222060000], [8571, 20221222060000]), ([1, 20221218060000], [8250, 20221218060000]), ([1, 20221216060000], [8000, 20221216060000]), ([1, 20221213060000], [7500, 20221213060000]), ([1, 20221210060000], [3500, 20221210060000]), ([1, 20221109060000], [6500, 20221109060000])]),
list([([1, 20230123060000], [5745, 20230123060000]), ([1, 20230105060000], [13000, 20230105060000]), ([1, 20221228060000], [6000, 20221228060000]), ([2, 20221227060000], [6000, 20221227060000]), ([1, 20221222060000], [8571, 20221222060000]), ([1, 20221218060000], [8250, 20221218060000]), ([1, 20221216060000], [8000, 20221216060000]), ([1, 20221213060000], [7500, 20221213060000]), ([1, 20221210060000], [3500, 20221210060000]), ([1, 20221109060000], [6500, 20221109060000]), ([1, 20220909050000], [9999, 20220909050000])]),
list([([1, 20230123060000], [5745, 20230123060000]), ([1, 20230105060000], [13000, 20230105060000]), ([1, 20221228060000], [6000, 20221228060000]), ([2, 20221227060000], [6000, 20221227060000]), ([1, 20221222060000], [8571, 20221222060000]), ([1, 20221218060000], [8250, 20221218060000]), ([1, 20221216060000], [8000, 20221216060000]), ([1, 20221213060000], [7500, 20221213060000]), ([1, 20221210060000], [3500, 20221210060000]), ([1, 20221109060000], [6500, 20221109060000]), ([1, 20220909050000], [9999, 20220909050000]), ([1, 20220901050000], [8444, 20220901050000])])],
dtype=object)
По какой-то причине кортежи и списки не конвертируются должным образом. Из-за этого b
не работает как обычный массив NumPy, потому что все элементы являются объектами. Я знаю, что могу пройти и скрыть все tuples
в lists
, но есть ли способ заставить NumPy преобразовать все правильно?
Кстати, под правильным преобразованием я подразумеваю вместо:
array([list([()])])
Он должен быть преобразован как:
array([[[]]])
«По какой-то причине кортежи и списки не преобразуются должным образом». Как вы думаете, что должно получиться вместо этого? Почему? Можете ли вы продемонстрировать проблему с меньшим вводом? Пожалуйста, прочитайте Как спросить и минимальный воспроизводимый пример.
Я думаю, проблема может быть в том, что не все ваши списки имеют одинаковый размер, например. np.array([[1, 2], [3, 4]])
в порядке, но np.array([[1, 2], [3, 4, 5]])
вызвал Creating an ndarray from ragged nested sequences
предупреждение. Либо отфильтруйте, либо добавьте значение по умолчанию в список, чтобы каждый элемент сначала имел одинаковый размер (возможно, проблема в части list([])
)
Ваш ввод кажется неровным. NumPy не создает зубчатые массивы — строгие требования к форме имеют решающее значение для эффективности NumPy.
О, так мне нужно заполнить отдельные массивы, чтобы они были одинаковой длины?
Это был бы один из способов справиться с ситуацией. Подходит ли это для вашего варианта использования, мы не можем сказать.
@catasaurus Да, ты должен. Или удалить их из списка. Или, чтобы сократить все остальные... Массив Numpy гиперпрямоугольный (это означает, что они имеют обычный размер во всех измерениях).
Этот list([])
выделяется как больной палец! Дело не в сочетании кортежей и списков, а в их размере.
Как правильно заметил Wakeme UpNow
, ваша проблема в том, что ваши списки имеют разный размер. Ключевой момент, который вы должны понимать при работе с NumPy
, заключается в том, что он получает свою производительность, делая некоторые предпосылки о ваших данных, то есть:
Если вы нарушите одну из этих предпосылок, вы автоматически потеряете все выгоды, которые в противном случае вы получили бы от NumPy
использования, поскольку оно вернется к чистому pythonic
поведению (то есть к dtype=object
).
Подробное NumPy
обсуждение можно найти здесь.
Таким образом, способ решить эту вашу проблему - использовать числовые значения одного типа данных для массивов одинаковой длины.
Ваше здоровье
Отвечает ли это на ваш вопрос? Список списков в массиве numpy