我有一个长度为N的1D Numpy数组A。 对于数组中的每个元素x,我想知道在范围[x-eps; x+eps]内的所有元素占数组中所有元素的比例,其中eps是常量。 N的顺序为15,000。
目前我使用以下方法(最小示例):
目前我使用以下方法(最小示例):
import numpy as np
N = 15000
eps = 0.01
A = np.random.rand(N, 1)
prop = np.array([np.mean((A >= x - eps) & (A <= x + eps)) for x in A])
这需要在我的电脑上大约 1 秒钟。
我的问题是:有没有更有效的方法来完成这个任务?
编辑:我认为 @jdehesa 在评论中提出的建议可能适用于以下情况:
prop = np.isclose(A, A.T, atol=eps, rtol=0).mean(axis=1)
这是一个简洁明了的解决方案,但在我的电脑上没有速度优势。
np.isclose
/np.allclose
? - jdehesanp.isclose
来实现它。 - monade