我有一个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)
预期产量: …
我有一个带有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)
另外,我还有另一个矩阵N(1.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) 我想重现 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 用于“回归”目标的默认函数是什么?
我有一个看起来像这样的矩阵:
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边界求和每个值的有效方法是什么?