#python #arrays #numpy #itertools
#python #массивы #numpy #python-itertools
Вопрос:
list(itertools.product([[True,False],[False, True]], repeat=2))
Приведенная выше команда выдает вывод, приведенный ниже.
[((True, False), (True, False)),
((True, False), (False, True)),
((False, True), (True, False)),
((False, True), (False, True))]
Однако я хочу, чтобы это выглядело так:
array([[ True, False, True, False],
[ True, False, False, True],
[False, True, True, False],
[False, True, False, True]])
Все поможет!
Ответ №1:
Сначала создайте свой продукт:
pr = list(itertools.product([[True, False], [False, True]], repeat=2))
Затем преобразуйте его в массив Numpy с соответствующим изменением формы:
a = np.array(pr).reshape((len(pr), -1))
Результатом является:
array([[ True, False, True, False],
[ True, False, False, True],
[False, True, True, False],
[False, True, False, True]])
Этот код работает также для других значений repeat (проверьте, например, для
повтор=3).
И замечание о других решениях: все они, за исключением mathfux, генерируют простые pythonic списки, а не Numpy массивы (как вы указали).
Ответ №2:
Значения списка продуктов являются кортежами.
Вы можете перебирать кортежи списка продуктов,
каждый раз объединяйте кортежи каждого списка в новый список:
например
([True, False], [True, False]) -> [True, False, True, False]
Вариант 1
import itertools
x = list(itertools.product([[True,False],[False, True]], repeat=2))
x = [list(v[0] v[1]) for v in x]
# [[True, False, True, False], [True, False, False, True], [False, True, True, False], [False, True, False, True]]
print(x)
Вариант 2: одна строка
import itertools
x = [list(v[0] v[1]) for v in list(itertools.product([[True,False],[False, True]], repeat=2))]
# [[True, False, True, False], [True, False, False, True], [False, True, True, False], [False, True, False, True]]
print(x)
Ответ №3:
В numpy
терминах вам нужно изменить его форму:
X = [((True, False), (True, False)),
((True, False), (False, True)),
((False, True), (True, False)),
((False, True), (False, True))]
np.array(X).reshape(4,4)
[[ True False True False]
[ True False False True]
[False True True False]
[False True False True]]
Ответ №4:
out = [[*a, *b] for a, b in itertools.product([[True,False],[False, True]], repeat=2)]
print(out)
С принтами:
[[True, False, True, False],
[True, False, False, True],
[False, True, True, False],
[False, True, False, True]]