gpt4 book ai didi

numpy - 为什么这个 numpy 数组比较会失败?

转载 作者:行者123 更新时间:2023-12-04 16:59:24 24 4
gpt4 key购买 nike

我试着比较一些 numpy.array 的结果与预期结果的计算,我经常得到错误的比较,但打印的数组看起来相同,例如:

def test_gen_sine():
A, f, phi, fs, t = 1.0, 10.0, 1.0, 50.0, 0.1
expected = array([0.54030231, -0.63332387, -0.93171798, 0.05749049, 0.96724906])
result = gen_sine(A, f, phi, fs, t)
npt.assert_array_equal(expected, result)

打印回来:
>                   raise AssertionError(msg)
E AssertionError:
E Arrays are not equal
E
E (mismatch 100.0%)
E x: array([ 0.540302, -0.633324, -0.931718, 0.05749 , 0.967249])
E y: array([ 0.540302, -0.633324, -0.931718, 0.05749 , 0.967249])

我的 gen_sine 函数是:
def gen_sine(A, f, phi, fs, t):  
sampling_period = 1 / fs
num_samples = fs * t
samples_range = (np.arange(0, num_samples) * 2 * f * np.pi * sampling_period) + phi
return A * np.cos(samples_range)

这是为什么?我应该如何比较两个数组?
(我使用的是 numpy 1.9.3 和 pytest 2.8.1)

最佳答案

问题是np.assert_array_equal返回 None并在内部执行 assert 语句。像您这样做时以单独的断言开头是不正确的:

assert np.assert_array_equal(x,y)

相反,在您的测试中,您只需执行以下操作:
import numpy as np
from numpy.testing import assert_array_equal

def test_equal():
assert_array_equal(np.arange(0,3), np.array([0,1,2]) # No assertion raised
assert_array_equal(np.arange(0,3), np.array([2,0,1]) # Raises AssertionError

更新:

一些评论
  • 不要重写整个原始问题,因为那时还不清楚答案实际解决的是什么。
  • 就您更新的问题而言,问题在于 assert_array_equal如文档中所述,不适合比较浮点数组。而是使用 assert_allclose然后设置所需的相对和绝对容差。
  • 关于numpy - 为什么这个 numpy 数组比较会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33053988/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com