首页 > 解决方案 > 使用 np.isclose() 比较时间向量时出现内存错误

问题描述

我正在尝试比较两个不同大小的数组,这些数组的值与时间有关。因此,我有两个数据集,每个数据集都有一个时间向量列和一个值向量列,如下所示(每个数组的大小不同):

array_a = data_dictionary["set_a"]["data_1"]

array_b = data_dictionary["set_b"]["data_1"]

array_a:
   array([[0.00000000e+00, 2.96718600e+02],
       [1.00000000e-02, 2.96718423e+02],
       [1.83333333e-02, 2.96718223e+02],
       ...,
       [6.99982588e+02, 0.00000000e+00],
       [6.99992588e+02, 0.00000000e+00],
       [7.00000000e+02, 0.00000000e+00]])

array_b:
   array([[0.00000000e+00, 2.96718600e+02],
       [1.00000000e-02, 2.96717014e+02],
       [1.83333333e-02, 2.96716803e+02],
       ...,
       [6.99984486e+02, 0.00000000e+00],
       [6.99994485e+02, 0.00000000e+00],
       [7.00000000e+02, 0.00000000e+00]])

size_a = 70010 # len(array_a)
size_b = 70011 # len(array_b)

我想通过选择彼此足够接近的时间步长来比较数组的值,因为我没有非常统一的 dts,有时时间步长可以是 0.01,其他时候可以是 0.02 甚至 5.0 秒。所以我尝试了这里的建议(Andras Deak 的第二条评论):使用 numpy 比较和查找两个不同大小的数组之间的错误,但是当我使用 np.isclose() 时出现内存错误,如下所示:


idx_a,idx_b = np.where(np.isclose(array_a[:,None,0],array_b[:,0],rtol=0.0001))

Error:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/software/x86_64/anaconda/3-5.2.0/lib/python3.6/site-packages/numpy/core/numeric.py", line 2335, in isclose
    return within_tol(x, y, atol, rtol)
  File "/software/x86_64/anaconda/3-5.2.0/lib/python3.6/site-packages/numpy/core/numeric.py", line 2321, in within_tol
    return less_equal(abs(x-y), atol + rtol * abs(y))
MemoryError

我想知道为什么会这样?更好的解决方案是创建一个较小的虚拟数组,然后将我的值与 array_a 和 array_b 进行比较,例如:

dummy_array=np.arange(0.0,700.5,0.5)
idx_dummy,idx_b = np.where(np.isclose(dummy_array[:,None,0],array_b[:,0],rtol=0.0001))
idx_dummy,idx_a = np.where(np.isclose(dummy_array[:,None,0],array_a[:,0],rtol=0.0001))

标签: pythonnumpyarray-broadcasting

解决方案


推荐阅读