将单元格的输出保存为 jupyter notebook 中的 txt 文件

tbo*_*one 3 python random jupyter-notebook

我非常想将最后一个单元格的输出保存在一个 txt 文件中。

 q = [rng.next () for _ in range (0, 25000000)]
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用 pandas 数据框,但我需要 txt 文件来执行 Diehard 测试。在 jupyter notebook 中可行吗?执行Dieharder Suite可能需要什么类型的数据?

我几乎可以肯定,一旦我做了类似的事情,不幸的是我不记得是怎么做的,我找不到明确的答案

下面是我的 LCG 随机数生成器的代码:

import numpy as np

class LCG(object):

    UZERO: np.uint32 = np.uint32(0)
    UONE : np.uint32 = np.uint32(1)

    def __init__(self, seed: np.uint32, a: np.uint32, c: np.uint32) -> None:
        self._seed: np.uint32 = np.uint32(seed)
        self._a   : np.uint32 = np.uint32(a)
        self._c   : np.uint32 = np.uint32(c)

    def next(self) -> np.uint32:
        self._seed = self._a * self._seed + self._c
        return self._seed

    def seed(self) -> np.uint32:
        return self._seed

    def set_seed(self, seed: np.uint32) -> np.uint32:
        self._seed = seed

    def skip(self, ns: np.int32) -> None:
        """
        Signed argument - skip forward as well as backward

        The algorithm here to determine the parameters used to skip ahead is
        described in the paper F. Brown, "Random Number Generation with Arbitrary Stride,"
        Trans. Am. Nucl. Soc. (Nov. 1994). This algorithm is able to skip ahead in
        O(log2(N)) operations instead of O(N). It computes parameters
        A and C which can then be used to find x_N = A*x_0 + C mod 2^M.
        """

        nskip: np.uint32 = np.uint32(ns)

        a: np.uint32 = self._a
        c: np.uint32 = self._c

        a_next: np.uint32 = LCG.UONE
        c_next: np.uint32 = LCG.UZERO

        while nskip > LCG.UZERO:
            if (nskip & LCG.UONE) != LCG.UZERO:
                a_next = a_next * a
                c_next = c_next * a + c

            c = (a + LCG.UONE) * c
            a = a * a

            nskip = nskip >> LCG.UONE

        self._seed = a_next * self._seed + c_next


#%%
np.seterr(over='ignore')

a = np.uint32(1664525)
c = np.uint32(1013904223)
seed = np.uint32(1)

rng = LCG(seed, a, c)
q = [rng.next() for _ in range(0, 25000000)]
Run Code Online (Sandbox Code Playgroud)

Com*_*non 7

在另一个单元格中运行

%%capture cap --no-stderr
print(q)
Run Code Online (Sandbox Code Playgroud)

然后又是另一个单元格

with open('output.txt', 'w') as f:
    f.write(cap.stdout)
Run Code Online (Sandbox Code Playgroud)