RuntimeWarning: divide by zero encountered in power d_inv_sqrt = np.power(rowsum, -0.5).flatten()
时间: 2023-12-03 18:45:39 浏览: 83
这个警告是因为有些行的元素和为0,导致在计算倒数平方根时出现了除以0的情况。你可以在代码中加入判断,避免除以0的情况发生,例如:
```python
rowsum = np.sum(adj_matrix, axis=1)
rowsum[rowsum == 0] = 1 # 避免除以0的情况
d_inv_sqrt = np.power(rowsum, -0.5).flatten()
```
这样就可以避免出现警告了。
相关问题
loss = criterion(output[train_mask].float(), drug_graph_label[train_mask].float())报错RuntimeWarning: divide by zero encountered in power d_inv_sqrt = np.power(rowsum, -0.5).flatten()
这个报错可能是因为 `rowsum` 中有 0 值导致的,而在进行 `-0.5` 次方的运算时,会遇到除以 0 的情况,从而报出该错误。
你可以检查一下 `rowsum` 是否包含 0 值,如果有,可以将它们替换成一个非零值,比如 1e-6,以避免出现除以 0 的情况。也可以在计算 `d_inv_sqrt` 时,使用 `np.where` 函数来避免出现除以 0 的情况,示例如下:
```python
eps = 1e-6
d_inv_sqrt = np.where(rowsum > eps, np.power(rowsum, -0.5), 0)
```
这样,当 `rowsum` 小于等于 `eps` 时,`d_inv_sqrt` 将被赋值为 0,避免了除以 0 的情况。
RuntimeWarning: divide by zero encountered in divide average_loss1=np.sum(np.abs((predict-testY)/testY))/p
This warning occurs when the code tries to divide a number by zero. In this case, it is likely that the testY data contains some values that are zero, causing the division to fail. To avoid this warning, you can add a check to ensure that the denominator is not zero before dividing. For example:
```
mask = testY != 0
average_loss1 = np.sum(np.abs((predict-testY)/testY[mask])) / np.sum(mask)
```
This code creates a boolean mask to identify the non-zero values in testY, and then uses this mask to calculate the average loss only for those values.