сброс numpy случайное состояние для нормальной функции, когда не выбран - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть случайная функция Numpy ниже, называемая нормальной, и мне нужно ее перехватить, чтобы сохранить большое количество данных, но по сути у меня есть это, я пытаюсь сохранить объект и использовать его позже, но я, когда выбираю его объект сохраняет свое состояние, поэтому, когда я открепляю его, объект сохраняет его старое случайное состояние и отсоединяется от NumPY глобальное случайное состояние, есть ли способ обойти это / когда непеченые снова используют глобальное случайное состояние, а не протравленную версию

import pickle
from pprint import pprint
from typing import Any, Dict

from numpy.random import normal, seed


def generate_asset() -> Dict:
    return {
        "func": normal,
        "args": [314.4, 408.6]
    }


def get_sample(asset: Any) -> float:

    value = asset['func'](*asset['args'])

    return value


def pickle_asset(asset: Any) -> bytes:
    return pickle.dumps(asset)


def load_pickled_asset(asset: bytes) -> Dict:
    return pickle.loads(asset)


def main():
    original_asset = generate_asset()
    pprint(f'original asset: {original_asset}')

    pickled_asset = pickle_asset(original_asset)

    original_sample = get_sample(original_asset)
    print(f'original sample: {original_sample}')

    original_unpickled_asset = load_pickled_asset(pickled_asset)

    original_unpickled_sample = get_sample(original_unpickled_asset)
    pprint(f'unpickled sample: {original_unpickled_sample}')

    print('RESETING SEED!!!!!!')
    seed(42947295)

    reseed_sample = get_sample(original_asset)
    print(f'reseed_sample {reseed_sample}')

    re_unpickled_asset = load_pickled_asset(pickled_asset)
    re_unpickled_sample = get_sample(re_unpickled_asset)
    print(f're_unpickled_asset {re_unpickled_sample}')


    print('TESTING RESETING SEED AFTER UNPICKLE!!!!')
    reseed_unpickled_asset = load_pickled_asset(pickled_asset)
    seed(42295)
    reseed_unpickled_sample = get_sample(reseed_unpickled_asset)

    is_same = True if original_sample == original_unpickled_sample else False
    print(f'Checking if original_sample and original_unpickled_sample are the same with original unpickle {is_same}')
    print('Expected: True')

    is_same = True if original_sample == reseed_sample else False
    print(f'Checking if original_sample and reseed_sample are the same after reseeding{is_same}')
    print('Expected: False')

    is_same = True if original_sample == re_unpickled_sample else False
    print(f'Checking if original_sample and re_unpickled_sample are the same with fresh unpickle{is_same}')
    print('Expected: True')

    is_same = True if original_sample == reseed_unpickled_sample else False
    print(f'Checking if original_sample and reseed_unpickled_sample are the same after reseeding {is_same}')
    print('Expected: True')


if __name__ == '__main__':
    main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...