Почему декартово произведение приводит к «TypeError: итерация по массиву 0»? - PullRequest
2 голосов
/ 31 мая 2019

Я пытаюсь сделать декартово произведение из списка массивов, но оно продолжает давать мне 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

Чего мне не хватает?

1 Ответ

2 голосов
/ 31 мая 2019

Как объясняется @ 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')]
...