修改程序 if binary_matrix[i][j] == 1: f.write("{}\t{}\t{}\n".format(i * avg_interval_dx + col1_min, j * avg_interval_dy + col2_min, binary_matrix[i][j])),,使txt文件中保存的数据保留小数点后三位,当小数点后的第三位为0则保留小数点后两位
时间: 2024-03-23 14:37:45 浏览: 34
可以修改程序如下:
```
if binary_matrix[i][j] == 1:
value = i * avg_interval_dx + col1_min
if value == round(value, 2):
f.write("{:.2f}\t{:.2f}\t{}\n".format(value, j * avg_interval_dy + col2_min, binary_matrix[i][j]))
else:
f.write("{:.3f}\t{:.3f}\t{}\n".format(value, j * avg_interval_dy + col2_min, binary_matrix[i][j]))
```
在这里我们先将 i * avg_interval_dx + col1_min 的值赋给一个 value 变量,然后通过 round 函数判断其是否需要保留小数点后两位。如果需要保留,我们使用 "{:.2f}" 格式化字符串输出;否则我们使用 "{:.3f}" 格式化字符串输出,保留小数点后三位。
相关问题
程序执行提示ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all(),修改程序gray = cv2.imread('skeleton_median_binary.bmp') binary_matrix = (gray > 0).astype(int) with open('image_1.txt', 'w') as f: for i in range(binary_matrix.shape[0]): for j in range(binary_matrix.shape[1]): if binary_matrix[i][j] == 1: f.write("{} {} {}\n".format(i * 2 + 1, j * 3 + 2, binary_matrix[i][j]))
这个错误提示是因为在if语句中使用了一个numpy数组,而numpy数组的真值判断是不允许的。要解决这个问题,可以使用numpy提供的`numpy.any()`函数来判断numpy数组中是否存在True值。下面是修改后的代码:
```python
gray = cv2.imread('skeleton_median_binary.bmp', cv2.IMREAD_GRAYSCALE)
binary_matrix = (gray > 0).astype(int)
with open('image_1.txt', 'w') as f:
for i in range(binary_matrix.shape[0]):
for j in range(binary_matrix.shape[1]):
if binary_matrix[i][j].any():
f.write("{} {} {}\n".format(i * 2 + 1, j * 3 + 2, binary_matrix[i][j]))
```
在if语句中,使用了`.any()`函数来判断二值矩阵中是否存在True值,从而避免了上述错误。
执行后txt文件中仍有小数点后的第三位为0的数据,修改程序if binary_matrix[i][j] == 1: value = i * avg_interval_dx + col1_min if value == round(value, 2): f.write("{:.2f}\t{:.2f}\t{}\n".format(value, j * avg_interval_dy + col2_min, binary_matrix[i][j])) else: f.write("{:.3f}\t{:.3f}\t{}\n".format(value, j * avg_interval_dy + col2_min, binary_matrix[i][j]))
如果你执行程序后还是有小数点后第三位为0的数据,我们可以考虑使用以下代码:
```
if binary_matrix[i][j] == 1:
value = i * avg_interval_dx + col1_min
if abs(value - round(value, 2)) < 0.001:
f.write("{:.2f}\t{:.2f}\t{}\n".format(value, j * avg_interval_dy + col2_min, binary_matrix[i][j]))
else:
f.write("{:.3f}\t{:.3f}\t{}\n".format(value, j * avg_interval_dy + col2_min, binary_matrix[i][j]))
```
这里我们使用 abs 函数判断小数点后第三位是否为0,如果差值小于0.001,就将其保留小数点后两位。如果仍然无法解决问题,可以考虑使用 Decimal 类型进行精确小数点计算。
阅读全文