给定边界值
我尝试了
k
,有一种向量化的方法来将每个数字 n
替换为从 n-1
到 k
的连续递减数?例如,如果 k
是 0,则想要用 np.array([3,4,2,2,1,3,1])
替换它,结果是 np.array([2,1,0,3,2,1,0,1,0,1,0,0,2,1,0,0])
。输入数组的每个项都大于k
。我尝试了
np.repeat
和 np.cumsum
的组合,但似乎不是理想的解决方案:x = np.array([3,4,2,2,1,3,1])
y = np.repeat(x, x)
t = -np.ones(y.shape[0])
t[np.r_[0, np.cumsum(x)[:-1]]] = x-1
np.cumsum(t)
还有其他方法吗?我希望像 np.add.reduceat
的逆运算,它可以将整数广播到递减的序列而不是最小化它们。
numpy
功能中没有任何隐藏的方法或途径,正如我一直在等待的那样。虽然 2 倍的加速效果更好,但感谢您的合作。这帮助我将itertools.combinations
的速度提高了 1.5 倍! - mathfux