Python 在numpy数组中打印更改的值

Python 在numpy数组中打印更改的值,python,arrays,numpy,Python,Arrays,Numpy,我认识的一个人在打印numpy数组时出现了一些奇怪的行为。他想断言,他使用np.allclose()计算的自相关性相当接近。但是,如果他没有打印阵列,并且如果他事先打印阵列,测试就失败了 下面是我在Windows 10、python 3.7.2(64位)和numpy 1.16.1中尝试的示例代码: import numpy as np def autocorrelation(data): """ Input is an array of the form number_data

我认识的一个人在打印numpy数组时出现了一些奇怪的行为。他想断言,他使用np.allclose()计算的自相关性相当接近。但是,如果他没有打印阵列,并且如果他事先打印阵列,测试就失败了

下面是我在Windows 10、python 3.7.2(64位)和numpy 1.16.1中尝试的示例代码:

import numpy as np

def autocorrelation(data):
    """
    Input is an array of the form number_data * dimensions
    An example is shown when this cell is executed
    """
    # YOUR CODE HERE
    u = np.mean(data, axis=0, keepdims=True)
    std_dev = np.std(data, axis=0, keepdims=True)
    # std dev matrix
    std_mat = std_dev.T @ std_dev

    ## 1/|D| * sum {x elem D} ((x - u)/std_dev)^T * ((x - u)/std_dev)
    # (x - u)
    diff = (data - u)
    # (x - u)^T * (x -u)
    #A = diff.T @ diff
    #print(A)
    # pairwise division matrix std dev
    A = np.divide((diff.T @ diff),std_mat, where=(std_mat!=0))
    # print(A)

    # A/|D|
    return np.divide(A, data.shape[0])

test_data1 = np.stack([[1,2,3], [2,2,2]], axis=1)
cor1 = autocorrelation(test_data1)
real_cor1 = [[1.0, 0.0], [0.0, 0.0]]
print(cor1)
print(real_cor1)

test_data2 = np.stack([[1,2,3], [4,5,6]], axis=1)
cor2 = autocorrelation(test_data2)
real_cor2 = [[1,1], [1,1]]
print(cor2)
print(real_cor2)

print("test3")
test_data3 = np.stack([[21.0, 160, 110, 3.90, 2.620, 16.46]
,[21.0, 160, 110, 3.90, 2.875, 17.02]
,[22.8, 108, 93, 3.85, 2.320, 18.61]
,[21.4, 258, 110, 3.08, 3.215, 19.44]
,[18.7, 360, 175, 3.15, 3.440, 17.02]
,[18.1, 225, 105, 2.76, 3.460, 20.22]], axis=0)
cor3 = autocorrelation(test_data3)
real_cor3 = np.corrcoef(test_data3, rowvar=False)
print("cor3:\n",cor3)
print(real_cor3)

assert np.allclose(cor1, real_cor1), "Wrong output: correlation should be \n {} \n for this data, is \n {}".format(real_cor1, cor1)
assert np.allclose(cor2, real_cor2), "Wrong output: correlation should be \n {} \n for this data, is \n {}".format(real_cor2, cor2)
assert np.allclose(cor3, real_cor3), "Wrong output: correlation should be \n {} \n for this data, is \n {}".format(real_cor3, cor3)
像这样格式化代码在第一个断言中失败。重新运行代码似乎可以解决失败断言的问题

如果在返回前打印一个断言,不仅输出会被舍入,断言也不会失败

最后,我有两个问题:

1.)为什么
打印(A)
会导致四舍五入的数字

2.)为什么断言有时失败,有时不失败

如果有人能给我一个答案,我会非常高兴,因为我现在觉得自己很愚蠢

祝你过得愉快

E:

规范:问题可能存在于
A.\uu str\uuu()
中,因为此get由
print()
调用

最后,我有两个类似的问题:

1.)为什么
A.\uu str\uu()
会导致四舍五入的数字

2.)为什么断言有时失败,有时不失败


您可以在错误发生的地方查看此错误。

我刚刚运行了您的代码,它似乎每次都会通过。而且,
print()
不会影响您正在打印的变量的值。如果您想检查高达一定数量的有效数字的值,请使用格式,例如
打印(np.array_str(a,precision=10))
谢谢您的评论@VarunNayak,但是为什么打印不能以可预测的方式工作呢?我用过一次科学记数法,又用了一次四舍五入法。您可以指定您的操作系统以及您正在使用的python和numpy版本吗?我们在不同的操作系统上得到了不同的结果。你好,@VarunNayak,你看过我的最新编辑吗?我添加了一个colab笔记本,其中代码失败。我刚刚运行了您的代码,它似乎每次都会通过。而且,
print()
不会影响您正在打印的变量的值。如果您想检查高达一定数量的有效数字的值,请使用格式,例如
打印(np.array_str(a,precision=10))
谢谢您的评论@VarunNayak,但是为什么打印不能以可预测的方式工作呢?我用过一次科学记数法,又用了一次四舍五入法。您可以指定您的操作系统以及您正在使用的python和numpy版本吗?我们在不同的操作系统上得到了不同的结果。你好,@VarunNayak,你看过我的最新编辑吗?我添加了一个colab笔记本,其中代码失败。