二进制输出Python优化

2024-04-19 20:21:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了下面的代码。此代码的目标是生成一个(二进制)列,该列与第一个(二进制)列具有给定的相关性。你知道吗

但是,它生成具有所需相关性的列,但生成的列不是二进制的。你知道吗

col1 =  np.random.randint(2,size=(10,2))
df = pd.DataFrame(col1)
corr_intra_semaine =0.61
corr_inter_semaine =0.57
start_1 =0
end_1=1

def f(corr, x, start_1, end_1):
    y = 0
    for k in range(start_1, end_1 + 1):
        y += abs(corr - pearsonr(df.iloc[:,k] , x)[0])    
    return y 


for i in range(1, len(df.columns)):
    df.iloc[:,i] = minimize(lambda x :  f(corr_intra_semaine, x, 0, i-1) 
                            , np.random.rand(len(df))).x

df

这个程序的结果如下

 0 -    0.000000
 0 -    0.579208
 0 -    0.968021
 1 -    0.938635
 0 -    0.639041
 0 -    0.503649
...

我想要的是df[:,i]是一个二进制向量。 这就是这样的输出

 0 -    0
 0 -    1
 0 -    0
 1 -    1
 0 -    0
 0 -    1
...

你知道怎么解决吗?你知道吗


Tags: 代码indffornp二进制rangerandom
1条回答
网友
1楼 · 发布于 2024-04-19 20:21:33

np.random.rand(len(df))间隔[0, 1)中的浮点数。用随机返回0或1的例程替换它怎么样?你知道吗

numpy.random.randint(2, size=len(df))

在最小化过程中,您不能在之后使用浮点算法,因为这将再次产生浮点值。在给定的设置中,您不能期望获得每个输入的准确相关性值,但是如果以正确的方式增加或减少相关性,您仍然可以将值从0翻转到1,反之亦然。你知道吗

另一种方法可能是以这样一种方式采样,您可以直接得到一个很好的近似值。你知道吗

相关问题 更多 >