Skip to main content
 首页 » 编程设计

python之随机生成相似的向量

2025年05月04日16lyj

我有以下向量:

import numpy as np 
my_vector = np.array([0.001, -0.05, 0.3, 0.5, 0.01, -0.03]) 

有人可以建议一种方法来随机生成相似的向量,但值略有不同吗?例如,所需的输出是:

[0.002, -0.06, 0.2, 0.4, 0.02, -0.02] 

为了提供一些背景信息,此向量表示我输入分类模型的样本。我的计划是随机生成一组相似的样本,并将它们输入同一个模型,以观察其输出的变化。最终目标是验证模型是否为相似的样本生成相似的输出。

我试过 Create random vector given cosine similarity并将我想要的余弦相似度设置为 1,但使用这种方法我只能获得一个相似向量(见下文)。我至少需要 10 个。

def rand_cos_sim(v, costheta): 
# Form the unit vector parallel to v: 
u = v / np.linalg.norm(v) 
 
# Pick a random vector: 
r = np.random.multivariate_normal(np.zeros_like(v), np.eye(len(v))) 
 
# Form a vector perpendicular to v: 
uperp = r - r.dot(u)*u 
 
# Make it a unit vector: 
uperp = uperp / np.linalg.norm(uperp) 
 
# w is the linear combination of u and uperp with coefficients costheta 
# and sin(theta) = sqrt(1 - costheta**2), respectively: 
w = costheta*u + np.sqrt(1 - costheta**2)*uperp 
 
return w 
 
 
new_vector = rand_cos_sim(my_vector, 1) 
print(new_vector) 
 
# [ 0.00170622 -0.08531119  0.51186714  0.8531119   0.01706224 -0.05118671] 

我脑子里没有特定的相似性度量,它可以是欧几里德、余弦,以最有效的为准。欢迎提出任何建议。

请注意,我提供的 my_vector 仅用于说明目的,实际上,根据我正在测试的模型和不同的数据,我的向量将具有不同的值范围。

谢谢。

请您参考如下方法:

也许我过于简单化了,但你能不能只生成与你的大小相同的随机向量,然后将它们添加到你的向量中以使其相似(或者添加一个,然后相乘,因为你的示例似乎在较小的情况下变化较小数字)?

def similar_vector(my_vector): 
    return (0.95+numpy.random.rand(len(my_vector))*0.1)*my_vector