python - 使用 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))
解决方案
推荐阅读
- flutter - 如何在导航 2.0 中使用 onPopPage 返回最近的历史页面
- javascript - 内容在移动设备上显示不佳
- python-3.x - Cat 代码在 Matplotlib 中无法正常工作
- c++ - 如何防止 GCC 重新排序对特殊内存区域的写入?
- python - 我正在尝试检测一种语言,然后将其翻译成英语,但有些不对劲
- forms - 是否可以在 Microsoft Forms 上为每个 Teams 课程提交表格并自动填写教授姓名?
- node.js - 如何将键值对转换为相同键值对的数组
- xamarin - Adding Reverb effect to MediaPlayer in 'Mobile App (Xamarin.Forms)' project
- javascript - 每当我打开某人的图像时反应状态更新错误,并且图像也没有重新渲染。我该如何解决这个错误
- bash - grep 模式并找到该行的最后一个单词