我试着比较一些的结果 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)
Run Code Online (Sandbox Code Playgroud)
打印回:
> 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])
Run Code Online (Sandbox Code Playgroud)
我的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)
Run Code Online (Sandbox Code Playgroud)
这是为什么?我该如何比较两个阵列?(我正在使用numpy 1.9.3和pytest 2.8.1)
Jos*_*del 12
问题是np.assert_array_equal
返回None
并在内部执行assert语句.用一个单独的断言为它做前言是不正确的:
assert np.assert_array_equal(x,y)
Run Code Online (Sandbox Code Playgroud)
相反,在你的测试中你会做的事情如下:
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
Run Code Online (Sandbox Code Playgroud)
更新:
一些评论
不要重写整个原始问题,因为那时不清楚答案实际上是在解决什么问题.
至于您更新的问题,问题是assert_array_equal
不适合比较浮点数组,如文档中所述.而是使用assert_allclose
然后设置所需的相对和绝对公差.
归档时间: |
|
查看次数: |
2160 次 |
最近记录: |