Python将10×10向量组存入txt为单行且保留列表属性的方法
问题根因
你遇到的换行问题是因为你的向量v是numpy数组类型,numpy对长数组做字符串转换时会默认自动插入换行符,和你的写入逻辑无关。你不需要修改原数组的类型,只要调整输出时的字符串转换规则即可,完全不会影响原变量的性质。
解决方法
方法1:输出时临时转为普通列表(推荐,无全局影响)
只需要修改你构造msg的那一行代码,将numpy数组临时转成普通列表再转字符串即可:
msg = f'{gradient}, {str(v.tolist())}\n'
这个方法只会在生成输出字符串时做临时转换,原v变量的类型、数值完全不受影响。
方法2:修改numpy全局打印配置
你也可以在代码开头修改numpy的打印参数,关闭自动换行逻辑:
import numpy as np # 全局设置numpy打印时行宽不限,不会自动插入换行 np.set_printoptions(linewidth=np.inf) def gradient_descent(df, ini_v, alpha, tolerance, MAX_ITER=300, output_fname='output.txt'): v = ini_v with open(output_fname, 'w') as out: for i in range(MAX_ITER): gradient = norm(df(v), 2) v = v - alpha * gradient msg = f'{gradient}, {str(v)}\n' out.write(msg)
这个方法不需要修改写入逻辑,也不会改变v本身的类型。
补充说明
你之前用join方法担心类型变化,是因为你可能直接修改了原v变量,只要你仅在生成输出字符串时做临时转换,完全不会改变原数据的结构和类型。
内容的提问来源于stack exchange,提问作者user16836078
相关产品推荐
相关产品推荐

