Julia 如何显示元组{Float64,Bool}
我希望元组的布尔部分在作为矩阵的一部分时显示为这样(而不是整数或浮点)。 代码如下:Julia 如何显示元组{Float64,Bool},julia,Julia,我希望元组的布尔部分在作为矩阵的一部分时显示为这样(而不是整数或浮点)。 代码如下: a = [(1., true) (1.5 , true) ; (1.5 , false) (-5.5 , false) ] 2×2 Matrix{Tuple{Float64, Bool}}: (1.0, 1) (1.5, 1) (1.5, 0) (-5.5, 0) 然而,我希望得到以下结果: 2×2 Matrix{Tuple{Float64, Bool}}: (1.0, true) (1.5, t
a = [(1., true) (1.5 , true) ; (1.5 , false) (-5.5 , false) ]
2×2 Matrix{Tuple{Float64, Bool}}:
(1.0, 1) (1.5, 1)
(1.5, 0) (-5.5, 0)
然而,我希望得到以下结果:
2×2 Matrix{Tuple{Float64, Bool}}:
(1.0, true) (1.5, true)
(1.5, false) (-5.5, false)
我想我在朱莉娅的类型中遗漏了一些东西;感谢您的帮助
我偶然意识到:
b = [(1., true) (1.5 , true) ; (false, 1.5) (false, -5.5) ]
2×2 Matrix{Tuple{Real, Real}}:
(1.0, true) (1.5, true)
(false, 1.5) (false, -5.5)
显示布尔值,如我所期望的(第一种情况)。当元组的类型为Tuple{Real,Real}
时,也会意外地显示布尔值。我再一次感到我错过了什么;欢迎任何指向文档特定部分的指针。
我使用的是Julia 1.6.1。默认情况下,Julia以0和1等数组显示布尔类型的值,使显示更加紧凑。这样做是为了与位数组兼容(它将布尔值保存在一位中)。e、 g: 因为我们知道数组元素的类型是Bool,所以我们知道
1
是true
,而0
是false
但是,如果从类型中可以明显看出这些值是布尔值,则使用0
或1
。对于第一种情况,是浮点和布尔的元组,1
表示true
,而0
表示false
从值创建数组时,Julia对所有值使用公共类型,即Real
。但对于第二种情况,这并不清楚:1是真的,或者1是整数。这就是为什么Julia在第二种情况下显示true
和false
如果要使用只能包含Bool
或Float64
的类型,可以使用Union{Float64,Bool}显式执行
因此,如果要显示true
或false
,可以显式设置联合类型:
julia> a = Tuple{Union{Float64, Bool}, Union{Float64, Bool}}[(1., true) (1.5 , true) ; (1.5 , false) (-5.5 , false) ]
2×2 Matrix{Tuple{Union{Bool, Float64}, Union{Bool, Float64}}}:
(1.0, true) (1.5, true)
(1.5, false) (-5.5, false)
更新:此示例仅用于解释。如果元组中的第二个元素假定只包含
Bool
值,则将其类型更改为Union{Float64,Bool}
可能会显著影响性能。这会更改a
中的数据类型是,但恐怕没有其他方法(除了重载默认显示方法,这是一种“盗版”)很有趣,谢谢你的解释。你通过查看display方法找到答案了吗?我找不到解释这一点的文档,但我记得旧版本的Julia工作方式不同。它以前将[true,false]打印为[true,false],但不打印为[1,0]。如果你需要很好的表格打印能力,你可以看看像或这样的软件包
julia> a = Tuple{Union{Float64, Bool}, Union{Float64, Bool}}[(1., true) (1.5 , true) ; (1.5 , false) (-5.5 , false) ]
2×2 Matrix{Tuple{Union{Bool, Float64}, Union{Bool, Float64}}}:
(1.0, true) (1.5, true)
(1.5, false) (-5.5, false)