在Jupyter Notebook中将单元格的输出另存为txt文件

时间:2019-07-18 06:46:58

标签: python random jupyter-notebook

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

 q = [rng.next () for _ in range (0, 25000000)]

我知道我可以使用pandas数据框,但是我需要txt文件来进行Diehard测试。在jupyter笔记本中可行吗?进行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)]

1 个答案:

答案 0 :(得分:1)

在另一个单元格中下方运行

%%capture cap --no-stderr
print(q)

然后再另一个单元格

with open('output.txt', 'w') as f:
    f.write(cap.stdout)