divide by zero encountered in double_scalars clock_angle = math.degrees(math.atan(By[j] / Bz[j]))
时间: 2023-07-10 10:35:21 浏览: 52
这个错误是因为在计算 `math.atan(By[j] / Bz[j])` 时,Bz[j] 的值为0,导致了除以0的错误。在这种情况下,可以考虑在代码中添加一个条件判断来避免这种情况的发生,例如:
```
if Bz[j] == 0:
clock_angle = 90.0
else:
clock_angle = math.degrees(math.atan(By[j] / Bz[j]))
```
这样,在 Bz[j] 等于0的时候,clock_angle 的值将被设置为90.0。你可以根据实际情况来调整这个值。
相关问题
RuntimeWarning: divide by zero encountered in double_scalars
这个警告通常表示在计算过程中遇到了除以零的情况。它可能是因为你的代码中进行了除法操作,而除数为零导致的错误。
要避免这个警告,你可以在进行除法操作之前,先检查除数是否为零。例如:
```python
if divisor != 0:
result = dividend / divisor
else:
#处理除数为零的情况
result = 0 #或者你可以选择其他的处理方式
```
通过这样的处理,即使除数为零,也不会触发警告并且可以避免程序崩溃。
/tmp/ipykernel_3164/1425456350.py:11: RuntimeWarning: divide by zero encountered in double_scalars psnr = 10 * np.log10((255 ** 2) / mse)
这个警告通常是因为 MSE 的值为零,导致在计算 PSNR 时出现了除以零的情况。这可能是由于原始图像和压缩后的图像完全相同导致的。
为了避免这个警告,你可以在计算 PSNR 之前添加一个检查,判断 MSE 是否为零。如果 MSE 为零,说明原始图像和压缩后的图像完全相同,此时可以直接将 PSNR 设为一个较大的值。
下面是修改后的代码示例:
```python
import cv2
import numpy as np
# 加载原始图像
img_original = cv2.imread('original_image.png', cv2.IMREAD_GRAYSCALE)
# 加载 JPEG2000 压缩后的图像
img_jp2 = cv2.imread('compressed_image.jp2', cv2.IMREAD_GRAYSCALE)
# 计算 MSE 值
mse = ((img_original - img_jp2) ** 2).mean()
# 计算 PSNR 值
if mse == 0:
psnr = float('inf')
else:
psnr = 10 * np.log10((255 ** 2) / mse)
print('PSNR:', psnr)
```
在上面的代码中,我们添加了一个 if-else 语句来检查 MSE 是否为零,并根据情况计算 PSNR 值。如果 MSE 为零,说明原始图像和压缩后的图像完全相同,此时将 PSNR 设为正无穷大。