我有下面的Python片段来计算元素x
和y
(来自X
和Y
)同时验证条件x<=i
和y<=j
的次数,其中i
和j
是索引:
import numpy as np
X = np.array([ 8, 7, 9, 5, 3, 2, 4, 10, 6, 1])
Y = np.array([ 1, 3, 10, 9, 5, 7, 8, 2, 6, 4])
n = len(X)
count = 0
expected_count = 0
for i in range(n):
for j in range(n):
count += np.sum((X <= (i+1)) & (Y <= (j+1)))
expected_count += (i + 1) * (j + 1) / n
它工作正常,但出于性能考虑,我想矢量化这个操作.
我知道
i_ = np.arange(1, n+1)
j_ = np.arange(1, n+1)
m_ = i_[:, None] * j_[None, :]
生成一个n
xn
矩阵m_
,其元素和将返回expected_count
,似乎也是一种方法go count
.但我缺乏更多的NumPy知识来实现条件.
如何实现这一点,特别是在这种情况下矢量化(X <= (i+1)) & (Y <= (j+1))
操作?