小编Fra*_*ser的帖子

Numpy自定义Cumsum功能有上限/下限?

我有一个numpy/pandas值列表:

a = np.random.randint(-100, 100, 10000)
b = a/100
Run Code Online (Sandbox Code Playgroud)

我想应用一个自定义的cumsum函数,但我还没有找到一种没有循环的方法.自定义函数为cumsum值设置上限1和下限-1,如果sum的"add"超出这些限制,则"add"变为0.

如果总和介于-1和1的限制之间,但"添加"值将超出限制,则"添加"将成为-1或1的余数.

这是循环版本:

def cumsum_with_limits(values):
    cumsum_values = []
    sum = 0
    for i in values:
        if sum+i <= 1 and sum+i >= -1: 
            sum += i
            cumsum_values.append(sum)
        elif sum+i >= 1:
            d = 1-sum # Remainder to 1
            sum += d
            cumsum_values.append(sum)
        elif sum+i <= -1:
            d = -1-sum # Remainder to -1
            sum += d
            cumsum_values.append(sum)

    return cumsum_values
Run Code Online (Sandbox Code Playgroud)

有没有办法对此进行矢量化?我需要在大型数据集上运行此函数,性能是我当前的问题.感谢任何帮助!


更新:修改了代码,稍微澄清了输出:使用np.random.seed(0),前6个值是:

b = [0.72, -0.53, 0.17, 0.92, -0.33, 0.95]
Run Code Online (Sandbox Code Playgroud)

预期产量: …

python algorithm performance numpy pandas

8
推荐指数
2
解决办法
279
查看次数

布尔矩阵计算的最快方法

我有一个带有1.5E6行和20E3列的布尔矩阵,类似于这个例子:

M = [[ True,  True, False,  True, ...],
     [False,  True,  True,  True, ...],
     [False, False, False, False, ...],
     [False,  True, False, False, ...],
     ...
     [ True,  True, False, False, ...]
     ]
Run Code Online (Sandbox Code Playgroud)

另外,我还有另一个矩阵N1.5E6行、1列):

 N = [[ True],
      [False],
      [ True],
      [ True],
      ...
      [ True]
      ]
Run Code Online (Sandbox Code Playgroud)

我需要做的是通过操作符M组合的矩阵(1&1, 1&2, 1&3, 1&N, 2&1, 2&2 etc) 中的每一列对AND,并计算 result 和 matrix 之间有多少重叠N

我的 Python/Numpy 代码如下所示:

for i in …
Run Code Online (Sandbox Code Playgroud)

python performance numpy

6
推荐指数
2
解决办法
558
查看次数

为回归重现 LightGBM 自定义损失函数

我想重现 LightGBM 的自定义损失函数。这是我尝试过的:

lgb.train(params=params, train_set=dtrain, num_boost_round=num_round, fobj=default_mse_obj)
Run Code Online (Sandbox Code Playgroud)

default_mse_obj 被定义为:

residual = y_true - y_pred.get_label()
grad = -2.0*residual
hess = 2.0+(residual*0)
return grad, hess
Run Code Online (Sandbox Code Playgroud)

但是,与定义的自定义损失函数相比,默认“回归”目标的 eval 指标是不同的。我想知道,LightGBM 用于“回归”目标的默认函数是什么?

python machine-learning python-3.x xgboost lightgbm

5
推荐指数
1
解决办法
795
查看次数

块状聚合成箱,然后计算总和?

我有一个看起来像这样的矩阵:

M = [[1, 200],
 [1.8, 100],
 [2, 500],
 [2.5, 300],
 [3, 400],
 [3.5, 200],
 [5, 200],
 [8, 100]]
Run Code Online (Sandbox Code Playgroud)

我想按bin大小(适用于左列)对行进行分组,例如对于bin大小2(第一个bin是0-2的值,第二个bin是2-4的值,第三个bin是4-6的值,等等):

[[1, 200],
 [1.8, 100],
----
 [2, 500],
 [2.5, 300],
 [3, 400],
 [3.5, 200],
----
 [5, 200],
----
 [8, 100]]
Run Code Online (Sandbox Code Playgroud)

然后输出一个新的矩阵,其中包含每组右列的总和:

[200+100, 500+300+400+200, 200, 100]
Run Code Online (Sandbox Code Playgroud)

基于bin_size边界求和每个值的有效方法是什么?

python numpy python-3.x pandas

3
推荐指数
1
解决办法
189
查看次数