Почему декартово произведение дает «TypeError: итерация по массиву 0-d»?

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

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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
137
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Последний массив не является кортежем длины 0. Это 0-мерный массив. Он имеет один элемент и не имеет длины (что отличается от длины 0), и это не кортеж.

user2357112 supports Monica 31.05.2019 02:28

@ user2357112: Хорошо, я отредактировал свои формулировки. Если вы проголосовали против, пожалуйста, верните его или предложите дальнейшие улучшения, чтобы сделать ответ более ясным. Спасибо за комментарий

Sheldore 31.05.2019 02:32
product не является модулем, и * распаковка не является той частью, где что-то идет не так, но самая большая проблема была исправлена.
user2357112 supports Monica 31.05.2019 03:16

Теперь у меня есть другая проблема с распаковкой, которая происходит в продукте: у меня есть словарь, похожий на 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')]'. Что мне не хватает?

Harshad Surdi 01.06.2019 01:20

Другие вопросы по теме