Я запутался в логике этого кода при реализации локальной дифференциальной конфиденциальности.
Я пытаюсь реализовать некоторую логику с этими данными:
Когда первый бросок монеты равен 0, результат должен быть точно таким же, как и второй бросок монеты.
Когда первый бросок монеты равен 1, результат должен быть точно таким же, как и у самой записи.
coin flips: 12 entries: 0 1
00 0 | 0
01 1 | 1
10 0 | 1
11 0 | 1
для монетных сальто; 0: хвосты и 1: головы
Как изменить конкретное значение при использовании цикла for в torch.tensor? (пример: для записи в БД проверьте оператор и измените запись)
Я пробовал много вещей, таких как torch.tensor.where
через torch.tensor docs . Но пока не могу решить.
def get_parallel_db(db, remove_index):
return torch.cat((db[0:remove_index],
db[remove_index+1:]))
def get_parallel_dbs(db):
parallel_dbs = list()
for i in range(len(db)):
pdb = get_parallel_db(db, i)
parallel_dbs.append(pdb)
return parallel_dbs
def create_db_and_parallels(num_entries):
db = torch.rand(num_entries) > 0.5
pdbs = get_parallel_dbs(db)
return db, pdbs
def flip_coin():
coin = torch.rand(2) > 0.5 # 1 for heads and 0 for tails
return coin.float()
def decide_db(n_entries):
db, _ = create_db_and_parallels(n_entries)
db = db.float()
print(db)
for entry in db:
coin = flip_coin()
print("coins:" , coin[0], coin[1])
if coin[0] == 0:
print("coin1:" , coin[1])
#db[entry==entry] = coin[1]
else:
print("entry" , entry)
#db[entry==entry] = entry
return db
decide_db(10)
Ожидаемый результат должен быть таким, как я упоминал выше. Но фактический вывод чего-то еще чего я не хочу, потому что мне не удалось изменить конкретное значение entry в тензоре db .