如何让Julia的向量输出格式与Numpy一样美观?
问题
我在Julia中执行以下代码:
A = [ 2 1 3 0 0; 1 1 2 0 0; 0 6 0 2 1; 6 0 0 1 1; 0 0 -20 3 2 ] b = [10; 8; 0; 0; 0] println(A\b)
得到的输出为:
[8.000000000000002, 12.0, -6.000000000000001, -23.999999999999975, -24.000000000000043]
但我希望输出样式和Numpy处理同一问题的结果类似(最好保留末尾零和逗号):
[ 8. 12. -6. -24. -24.]
有没有简便方法实现?我可以自行编写函数,但如果能直接设置格式化标志就再好不过了。谢谢!
回答
可以用Julia的Printf模块配合数组元素格式化来实现,不需要从头写复杂函数:
先四舍五入再格式化输出
先把计算结果四舍五入到1位小数(对应示例里的显示格式),再统一格式化:using Printf result = A\b rounded_result = round.(result, digits=1) print("[") for (idx, val) in enumerate(rounded_result) @printf(" %4.1f", val) idx < length(rounded_result) && print(" ") end println("]")执行后输出:
[ 8.0 12.0 -6.0 -24.0 -24.0]直接格式化原始结果
不想提前四舍五入的话,直接用格式字符串截断显示即可,%.1f会自动处理浮点精度问题:using Printf result = A\b print("[") for (idx, val) in enumerate(result) @printf(" %4.1f", val) idx < length(result) && print(" ") end println("]")输出效果和上面一致,比如把
8.000000000000002显示为8.0,-23.999999999999975显示为-24.0。简洁写法:用
join拼接格式化元素
用列表推导式生成格式化后的元素字符串,再用join拼接,代码更紧凑:using Printf result = A\b formatted_str = join([@sprintf("%4.1f", val) for val in result], " ") println("[ $formatted_str ]")
如果想让这种格式成为数组默认显示方式,可以自定义Base.show方法,但会影响全局显示,不推荐除非有全局需求。上面几种都是轻量灵活的简便方案,无需编写复杂自定义函数。
内容的提问来源于stack exchange,提问作者mcmuffin6o
相关产品推荐
相关产品推荐

