Я пытаюсь сделать декартово произведение из списка массивов, но он продолжает давать мне TypeError: iteration over a 0-d array
У меня есть список, который выглядит так:
print(a)
>>>[array([1., 2.]), array([3., 4.]), array(1400.)]
Теперь, когда я пытаюсь сделать:
b=list(itertools.product(*a))
>>>TypeError: iteration over a 0-d array
Что мне не хватает?
Как объяснил @user2357112 в комментариях, в настоящее время у вас есть последний элемент в виде 0-мерного массива. Если вы проверите его длину, вы получите TypeError: len() of unsized object
. Чтобы ваше решение заработало, вам нужно заключить элемент в последний массив, используя []
, чтобы иметь возможность использовать product
import itertools
a = [np.array([1., 2.]), np.array([3., 4.]), np.array([1400.])]
b = list(itertools.product(*a))
#[(1.0, 3.0, 1400.0),
# (1.0, 4.0, 1400.0),
# (2.0, 3.0, 1400.0),
# (2.0, 4.0, 1400.0)]
Редактировать отвечает на второй вопрос по запросу:
import itertools
dict1 = {'wdth_i': ['1', '2'], 'wdth_p': ['3', '4'], 'mu': '1400'}
a = []
for i in dict1.values():
if isinstance(i, list):
a.append(i)
else:
a.append([i])
f = list(itertools.product(*a))
# [('1', '3', '1400'),
# ('1', '4', '1400'),
# ('2', '3', '1400'),
# ('2', '4', '1400')]
@ user2357112: Хорошо, я отредактировал свои формулировки. Если вы проголосовали против, пожалуйста, верните его или предложите дальнейшие улучшения, чтобы сделать ответ более ясным. Спасибо за комментарий
product
не является модулем, и *
распаковка не является той частью, где что-то идет не так, но самая большая проблема была исправлена.
Теперь у меня есть другая проблема с распаковкой, которая происходит в продукте: у меня есть словарь, похожий на dict1 = {{'wdth_i': ['1', '2'], 'wdth_p': ['3', '4'], 'mu': '1400'}
, поэтому, когда я это делаю, 'a=[] a.append(i) for i в dict1.values() f=list (itertools.product(*a))' Он "взрывает" значение mu, т.е. "1400", в "1" "4" "0" "0" и дает мне декартово произведение как таковое: "[('1 ', '3', '1'), ('1', '3', '4'), ('1', '3', '0'), ('1', '3', '0 '), ('2', '3', '1'), ('2', '3', '4'), ('2', '3', '0'), ('2', '3', '0')]'. Что мне не хватает?
Последний массив не является кортежем длины 0. Это 0-мерный массив. Он имеет один элемент и не имеет длины (что отличается от длины 0), и это не кортеж.