使用变量计算时,Julia打印出不同的结果

问题描述 投票:0回答:1

问题难以描述(因此标题不好),更容易显示:

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个回答
2
投票

这是一个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指数为真,以便链接比较返回truekth指数。

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.