Arrays 第一个数组中的元素计数小于或等于第二个数组中的元素

Arrays 第一个数组中的元素计数小于或等于第二个数组中的元素,arrays,python-3.x,Arrays,Python 3.x,我有一个从[0,1]开始排列的21381120个元素的数组A。我需要构造一个新数组B,其中元素I包含小于或等于a[I]的元素数 我的尝试: A = np.random.random(10000) # for reproducibility g = np.sort(A) B = [np.sum(g<=element) for element in A] 我希望输出是 B = [2, 1, 3, 4, 5] 您可以使用二进制搜索来加快排序数组中的搜索速度 看起来排序是一种方法,因为在排序数

我有一个从[0,1]开始排列的21381120个元素的数组
A
。我需要构造一个新数组
B
,其中元素
I
包含小于或等于
a[I]
的元素数

我的尝试:

A = np.random.random(10000) # for reproducibility
g = np.sort(A)
B = [np.sum(g<=element) for element in A]
我希望输出是

B = [2, 1, 3, 4, 5]

您可以使用二进制搜索来加快排序数组中的搜索速度


看起来排序是一种方法,因为在排序数组
a
中,小于或等于
a[i]
的元素数几乎是
i+1

但是,如果重复某个元素,则必须查看
A[i]
右侧最近的元素:

A = [1,2,3,4,4,4,5,6]
           ^^^^^ A[3] == A[4] == A[5]

在这里,元素的数量<代码>你能提供一个输入和预期输出的示例吗?在这里,我编辑了这个问题,也许这澄清了我需要做什么。谢谢,。即使对于数千万个元素的数组,这也不会超过一分钟。很高兴能提供帮助。二进制搜索的时间复杂度是O(logn),在使用线性搜索之前(时间复杂度O(n))
A = np.random.rand(10000) # for reproducibility
g = np.sort(A)
B = [np.searchsorted(g, element) for element in A]
A = [1,2,3,4,4,4,5,6]
           ^^^^^ A[3] == A[4] == A[5]
N(<= A[k]) = k + <number of elements equal to A[k]>