使用变量计算时,Julia打印出不同的结果
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用变量计算时,Julia打印出不同的结果相关的知识,希望对你有一定的参考价值。
问题难以描述(因此标题不好),更容易显示:
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]
。
由于第一个结果是错误的,我想知道这个问题是如何产生的,以及如何防止它。
答案
这是一个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]))
都必须为k
th指数为真,以便链接比较返回true
为k
th指数。
相反,您可以使用明确的括号编写相同的术语来处理优先级问题。
print((matr[:,2].==i) .* (matr[:,3].!=i))
您可以广播&
而不是乘法。
print((matr[:,2].==i) .& (matr[:,3].!=i))
这两个都应该给你正确的答案。
以上是关于使用变量计算时,Julia打印出不同的结果的主要内容,如果未能解决你的问题,请参考以下文章
根据我之前是不是打印出切片,在附加切片后计算 sha256 会给出不同的结果
我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情