julia-向量化的“点”运算符 (第5讲)
程序员文章站
2022-03-03 16:15:36
...
向量化的“点”运算符 2020/5/30
===============================================================================
1.1.用途:计算元素或向量的结果;操作数为数组或标量
1.2.说明:算数运算符和复合运算符都有相应的点操作
! √ += -= *= /= \= %= ^= &= |= ⊻ = >>>= >>= <<=
===============================================================================
2.实例:
实例1:
A,B,B1=[1,2,3],[4,5,6],2
A ^ 3 #错误:未定义
A .^ 3 #定义为计算元素(或“向量化”)结果[1^3, 2^3, 3^3]
# 3-element Array{Int64,1}:
# 1
# 8
# 27
A .^ B #A .^ B==(^).(A,B)
# 3-element Array{Int64,1}:
# 1
# 32
# 729
A .^ B1#执行广播操作
# 3-element Array{Int64,1}:
# 1
# 4
# 9
2 .* A.^2 .+ sin.(A)#等效:@. 2A^2 + sin(A) 用公式2a^2 + sin(A)对A中的每个元素计算
# 3-element Array{Float64,1}:
# 2.8414709848078967
# 8.909297426825681
# 18.14112000805987
=================================================================================
实例2:嵌套点调用f.(g.(A))
A .+ 3 .* A.^2#等价于嵌套点调用(+).(A, (*).(3, (^).(A, 2))) 数字3 .后面必须留空白
# 3-element Array{Int64,1}:
# 4
# 14
# 30
(+).(A, (*).(3, (^).(A, 2)))
# 3-element Array{Int64,1}:
# 4
# 14
# 30
==================================================================================
实例3:复合运算符
A .+= B#等价:@. A += B被解析为A.= A .+ B就地分配操作
# 3-element Array{Int64,1}:
# 5
# 7
# 9
A#注意A被修改
# 3-element Array{Int64,1}:
# 5
# 7
# 9
A=[1,2,3]
@. A += B
# 3-element Array{Int64,1}:
# 5
# 7
# 9
A=[1,2,3]
A.= A .+ B
# 3-element Array{Int64,1}:
# 5
# 7
# 9
==================================================================================
实例4:点语法应用于自定义算子
A,B,C,D=[1,2,3],[4,5,6],[11,12,13],[14,15,16]
⊗(A,B) = kron(A,B)#定义了一个Kronecker积
# ⊗ (generic function with 1 method)
[A,B] .⊗ [C,D]#被解析为[A⊗C, B⊗D]
2-element Array{Array{Int64,1},1}:
[11, 12, 13, 22, 24, 26, 33, 36, 39]
[56, 60, 64, 70, 75, 80, 84, 90, 96]
==================================================================================
实例5:
# 点运算符与数字文字的组合可能是不明确的(如1.+A为1. + A)
# 在这种情况下必须在运算符周围使用空格(在1后面加空格)
1 .+A
# 3-element Array{Int64,1}:
# 2
# 3
# 4
==================================================================================
实例6:操作符 .< 是特别针对数组
A,B=[1,4,7],[2,3,8]
0 .< A .< B #只有当 A 和 B 有着相同的大小时, A .< B 才是合法
# 3-element BitArray{1}:结果对应布尔数组,满足条件元素返回 true
# 1
# 0
# 1
==================================================================================
上一篇: 第23讲项目5-我的加班费