【问题标题】:Julia prints different results when calculating with variablesJulia 在使用变量进行计算时会打印出不同的结果
【发布时间】:2019-09-04 14:40:15
【问题描述】:

这个问题很难描述(因此标题不好),更容易展示它:

matr =
[
1 1 3
2 1 10
3 2 3
13 8 10]

i=1

print(matr[:,2].==i .* matr[:,3].!=i)
x = matr[:,2].==i
y = matr[:,3].!=i
print(x .* y)

第一个和第二个 print() 应该是等价的。无论如何,第一个打印Bool[false, false, false, false] 第二个打印Bool[true, true, false, false]

由于第一个结果是错误的,我想知道这个问题是如何出现的以及如何预防。

【问题讨论】:

    标签: boolean julia bitarray


    【解决方案1】:

    这是一个operator precedence 问题。你在第一个print 中写的不是你想要的。

    print(matr[:,2].==i .* matr[:,3].!=i)
    

    这相当于(见括号)

    print(matr[:,2] .== (i .* matr[:,3]) .!=i)
    

    这是一个chaining comparison,因此matr[k,2] == (i .* matr[k,3]))matr[k,2] == (i .* matr[k,3])) 对于kth 索引都必须为真,这样链接比较才能为kth 索引返回true

    相反,您可以使用显式括号编写相同的术语来处理优先级问题。

    print((matr[:,2].==i) .* (matr[:,3].!=i))
    

    你可以广播&而不是乘法。

    print((matr[:,2].==i) .& (matr[:,3].!=i))
    

    这两个都应该给你正确的答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-11
      • 1970-01-01
      • 2017-05-16
      • 1970-01-01
      • 2015-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多