У меня есть следующая проблема, в которой я хочу сгенерировать шаблоны с введенным значением 0. Проблема в том, что это должно быть экономически эффективно, и поэтому я хотел бы использовать генератор, который создает и возвращает один из шаблонов за раз (т. Е. Я не хочу создавать список и возвращать его.) Я в недоумении здесь, потому что я не знаю, что я делаю неправильно при вызове генератора, поэтому любая помощь будет оценена!Генератор, который дает подшаблоны исходного шаблона с введенными нулями
оригинальный рисунок = [0. 1. 1. 2.] генератор должен генерировать и возвращать эти: [0. 0. 1. 2.], [0. 1. 0. 2.], [0. 1. 1. 0.]
Однако я могу просто привести один из шаблонов с вызовом генератора (дополнительный 1.0 не является проблемой, чтобы не вызвать никаких путаница ...), и не все из них последовательно.
дали подшаблонов = (массив ([0, 1, 0, 2]), 1,0)
Ниже мой код:
import numpy as np
def removeoneletter(subpattern):
# generator = []
originalpattern = subpattern
subpatterncopy = subpattern.copy()
nonzero = np.nonzero(subpattern)
listnonzero = nonzero[0].tolist()
# only replace elements at nonzero positions with zero
for i in listnonzero:
subpatterncopy = subpattern.copy()
position = i
transaction = subpatterncopy[i]
np.put(subpatterncopy, position, 0)
print('subpattern generator')
print(subpatterncopy)
# generator.append((subpatterncopy, transaction))
yield((subpatterncopy, transaction))
if i == len(listnonzero):
break
и функция вызывается с помощью другая функция так:
def someotherfunction():
combinations = removeoneletter(subpatterncopy)
for x in combinations:
# x = next(combinations)
print('yielded subpattern')
print(x)
Конечно, извините, я не видел, что он не поддерживался. Я добавил пробелы и надеюсь, что они теперь точны. Спасибо. – trummelbummel
Вы должны упомянуть, что это проблема с numpy и соответственно добавить «import numpy as np». –
эй да, я добавил импорт. Однако это не проблема. Потому что код генерирует шаблоны просто отлично. Это проблема с уступкой от генератора. Однако я понял, что он делает то, что должен делать с отправленным кодом. Но что-то в задней части какой-то функции испортило то, что я пытался сделать. В основном это проблема с отступом. Я решил это сейчас. Возможно, остальная часть кода может помочь другому человеку. Поэтому я переименую вопрос. – trummelbummel