sim_mat_norm = np.zeros([len(all_sentences_words), len(all_sentences_words)]) for i in range(len(all_sentences_words)): for j in range(len(all_sentences_words)): if i != j: _len = len(all_sentences_words[i]) sim_mat_norm[i][j] = \ cosine_similarity(sentence_vectors[i].reshape(1, 300), sentence_vectors[j].reshape(1, 300))[ 0, 0] / _len nx_graph_norm = nx.from_numpy_array(sim_mat_norm)
时间: 2023-06-19 16:03:05 浏览: 90
这段代码的作用是构建一个词向量的余弦相似度矩阵,并将其转化为图结构。具体来说,它做了以下几个步骤:
1. 构建一个大小为(len(all_sentences_words), len(all_sentences_words))的零矩阵sim_mat_norm,用于存储所有句子两两之间的余弦相似度。
2. 对于每一对不同的句子i和j,计算它们的余弦相似度。这里使用了cosine_similarity函数,它可以计算两个向量之间的余弦相似度。
3. 将余弦相似度除以句子i的长度,得到一个归一化的相似度。这是为了避免长句子在相似度计算中占据过大的比重。
4. 将所有计算出来的相似度填入sim_mat_norm矩阵中。
5. 使用from_numpy_array函数将sim_mat_norm转化为一个图结构nx_graph_norm。这里使用了networkx库,它可以方便地构建、操作和可视化各种图结构。
相关问题
def create_laplacian_dict(self): # 拉普拉斯字典 def symmetric_norm_lap(adj): # rowsum = np.array(adj.sum(axis=1)) d_inv_sqrt = np.power(rowsum, -0.5).flatten() d_inv_sqrt[np.isinf(d_inv_sqrt)] = 0 d_mat_inv_sqrt = sp.diags(d_inv_sqrt) norm_adj = d_mat_inv_sqrt.dot(adj).dot(d_mat_inv_sqrt) return norm_adj.tocoo() def random_walk_norm_lap(adj): # 传入邻接矩阵 rowsum = np.array(adj.sum(axis=1)) # 行总和 d_inv = np.power(rowsum, -1.0).flatten() d_inv[np.isinf(d_inv)] = 0 d_mat_inv = sp.diags(d_inv) norm_adj = d_mat_inv.dot(adj) return norm_adj.tocoo() # 归一化的邻接稀疏矩阵 if self.laplacian_type == 'symmetric': # 解释器默认的是random—walk norm_lap_func = symmetric_norm_lap elif self.laplacian_type == 'random-walk': norm_lap_func = random_walk_norm_lap # 拉普拉斯的功能就用这个 else: raise NotImplementedError self.laplacian_dict = {} for r, adj in self.adjacency_dict.items(): self.laplacian_dict[r] = norm_lap_func(adj) A_in = sum(self.laplacian_dict.values()) self.A_in = self.convert_coo2tensor(A_in.tocoo())
可以看出这段代码是用来创建拉普拉斯字典的。其中使用了两种不同的归一化方法,分别是对称归一化和随机游走归一化。如果选择对称归一化,就使用函数symmetric_norm_lap,如果选择随机游走归一化,就使用函数random_walk_norm_lap。然后遍历邻接矩阵字典,对每一个邻接矩阵都进行相应的归一化操作,最后将所有的归一化邻接矩阵相加,得到A_in,并将其转换为张量格式。
N = len(RV_5min) - 1 RV_real_pred = np.zeros(N+1) RV_real_uub = np.zeros(N+1) RV_real_llb = np.zeros(N+1) RV_real_pred[0] = RV_5min[0] RV_real_uub[0] = RV_5min[0] RV_real_llb[0] = RV_5min[0] alpha=0.05 z_alpha = norm.ppf(1-alpha/2) for i in range(N): RV_real_pred[i+1] = c + beta*RV_5min[i] RV_real_uub[i+1] = RV_real_pred[i+1] + z_alpha*np.sqrt(np.var(RV_diff))*np.sqrt(1+beta**2) RV_real_llb[i+1] = RV_real_pred[i+1] - z_alpha*np.sqrt(np.var(RV_diff))*np.sqrt(1+beta**2) plt.plot(RV_5.index, np.maximum(0, RV_real_pred), 'k:') plt.plot(RV_5.index, np.maximum(0, RV_real_uub), 'r--', RV_5.index, np.maximum(0, RV_real_llb), 'r--') plt.xlabel('Time') plt.ylabel('RV') plt.legend(['Predicted', 'Upper Bound', 'Lower Bound']) plt.show() 画图x和y的长度不一样怎么改
为了绘制图形,确保x和y的长度一致,可以使用相同的时间轴作为x轴。假设RV_5min.index是时间轴,可以将其作为x轴,而RV_5min作为y轴。请注意,RV_5min和RV_diff的长度可能不同,因此需要相应调整。
下面是修正后的代码:
```python
N = len(RV_5min) - 1
RV_real_pred = np.zeros(N+1)
RV_real_uub = np.zeros(N+1)
RV_real_llb = np.zeros(N+1)
RV_real_pred[0] = RV_5min[0]
RV_real_uub[0] = RV_5min[0]
RV_real_llb[0] = RV_5min[0]
alpha=0.05
z_alpha = norm.ppf(1-alpha/2)
for i in range(N):
RV_real_pred[i+1] = c + beta*RV_5min[i]
RV_real_uub[i+1] = RV_real_pred[i+1] + z_alpha*np.sqrt(np.var(RV_5min))*np.sqrt(1+beta**2)
RV_real_llb[i+1] = RV_real_pred[i+1] - z_alpha*np.sqrt(np.var(RV_5min))*np.sqrt(1+beta**2)
plt.plot(RV_5min.index, np.maximum(0, RV_real_pred), 'k:')
plt.plot(RV_5min.index, np.maximum(0, RV_real_uub), 'r--', RV_5min.index, np.maximum(0, RV_real_llb), 'r--')
plt.xlabel('Time')
plt.ylabel('RV')
plt.legend(['Predicted', 'Upper Bound', 'Lower Bound'])
plt.show()
```
这样修改后,x轴和y轴的长度应该一致,可以正确地绘制图形。
阅读全文