取余运算怎么算_Julia系列教程3 数学运算 矩阵运算

本文是Julia系列教程的第三部分,主要介绍Julia中的数学运算和矩阵操作。内容涵盖数学表达式的解析规则,如十六进制和浮点数表示,向量的点乘运算,矩阵的定义、拼接以及基本操作。此外,还提到了矩阵运算中的函数应用,并指出在Julia中如何使用Statistics包进行统计计算。
摘要由CSDN通过智能技术生成

5429a6cede42ddff6a9d5c55757fd6b3.png
f906081c008eb475cfaa3ccc34d6afbd.png
数学运算https://www.zhihu.com/video/1113554595376295936

数学运算

比Matlab更直观的数学表达方式

x = 10
2x
>>20

但这就导致了可能会出现语法的冲突

  • 十六进制整数文本表达式 0xff 可以被解析为数值文本 0 乘以变量 xff
  • 浮点数文本表达式 1e10 可以被解析为数值文本 1 乘以变量 e10
  • 因此,Julia中
  • 以 0x 开头的表达式,都被解析为十六进制文本
  • 以数字文本开头,后面跟着 e 或 E ,都被解析为浮点数文本

运算方法

常用的 + - x /就不多说了,跟其他语言基本完全一样。

这里说一下向量运算,跟MATLAB的操作完全相同,比如向量的点乘,就是说对向量的元素一一操作

[1,2,3].*3
>>3-element Array{Int64,1}:
 3
 6
 9

比较运算,支持链式比较

1 <= 2 <= 3 == 3 <=5 >4 >=2
>>true

常用的数学函数

# 进位函数
round(x)        #四舍五入
floor(x)        #向下取整
ceil(x)         #向上取整
trunc(x)        #trunc是直接砍掉小数,在正数的时候trunc跟floor一样,负数时跟ceil一样
# 除法函数
div(x,y)        #取模
fld(x,y)        #取小于结果的最大整数
cld(x,y)        #取大于结果的最小整数
rem(x,y)        #取余
mod(x,y)        
mod1(x,y1)      #如果x是y的整数倍,则返回y,不会返回余数
mod2pi(x)       #对2pi取余
divrem(x,y)     #返回取模的值和取余的值
fldmod(x,y)     #返回取小于x的最大整数和取余的值
gcd(x,y...)     #最大公约数
lcm(x,y...)     #最小公倍数
# 符号函数
abs(x)          #求模
abs2(x)         #求平方
sign(x)         #取符号
signbit(x)      #正数返回false,负数返回true
copysign(x,y)   #返回x * sign(y)
flipsign(x,y)   #返回x * sign(y) * -1
# 开根号 log
sqrt(x)         #开根号
cbrt(x)         #开三次根
hypot(x,y)      #sqrt(x^2 + y^2)
exp(x)          #e^x
expm1(x)        #e^-x
ldexp(x,n)      #x^n
log(x)          #loge(x)
log(b,x)        #logb(x)
log2(x)         #log2(x)     
log10(x)        #log10(x)
log1p(x)        #loge(1+x)
# 三角函数
sin    cos    tan    cot    sec    csc
sinh   cosh   tanh   coth   sech   csch
asin   acos   atan   acot   asec   acsc
asinh  acosh  atanh  acoth  asech  acsch
sinc   cosc

矩阵操作

既然是做科学计算,那肯定是少不了矩阵,先从简单的向量说起
首先定义一个简单的矩阵,在REPL中看返回的类型

a = [1,2,3,4]
>>4-element Array{Int64,1}:
 1
 2
 3
 4

Julia中也可以像MATLAB中定义步进向量

aa = (1:2:5)
aa.start
aa.step
aa.stop
first(aa)
step(aa)
last(aa)

Int8[3, 4, 5]
>>3-element Array{Int8,1}:
 3
 4
 5
["one", "two", "threee"]
>>3-element Array{String,1}:
 "one"   
 "two"   
 "threee"
[true, "two", 1, 2.0]
>>4-element Array{Any,1}:
 true     
     "two"
    1     
    2.0   
[]
>>0-element Array{Any,1}
Int8[]
>>0-element Array{Int8,1}
a = (1, 2, 3)  # tuple
b = collect(a)
>>3-element Array{Int64,1}:
 1
 2
 3
c = collect(1:4) #不能直接写成[1:4]
c[2:end]
c1 = c      # c1与c的内存地址相同
c2 = c[:]   # c2是c的一个拷贝
c1[1] = 10
c
>>4-element Array{Int64,1}:
 10
  2
  3
  4
c2[1] = 20
c
>>4-element Array{Int64,1}:
 10
  2
  3
  4

b = [1;2;3;4]
>>4-element Array{Int64,1}:
 1
 2
 3
 4
c = [1 2 3 4]
>>1×4 Array{Int64,2}:
 1  2  3  4

再来看矩阵拼接中的空格 , ;的区别

x = ones(2,3)
y = zeros(2,3)
z = [x y]
>>2×6 Array{Float64,2}:
  1.0  1.0  1.0  0.0  0.0  0.0
  1.0  1.0  1.0  0.0  0.0  0.0
相当于hcat(x,y)
ndims(z)
>>2

z = [x,y]
>>2-element Array{Array{Float64,2},1}:
  [1.0 1.0 1.0; 1.0 1.0 1.0]
  [0.0 0.0 0.0; 0.0 0.0 0.0]
ndims(z)
>>1

[x;y]
>>4×3 Array{Float64,2}:
  1.0  1.0  1.0
  1.0  1.0  1.0
  0.0  0.0  0.0
  0.0  0.0  0.0
相当于vcat(x,y)
ndims(z)
>>2

那怎么把[x,y]也变成一个没有嵌套的矩阵呢?

hcat([x,y]...) #表示把矩阵内部的Array作拼接

# 矩阵索引,从1开始
x[1]
>>1
x[6]
>>1
size(x)
>>(2,3)
length(x)
>>6
sum(x)
>>6

矩阵运算

a = collect(reshape(1:6,2,3))
b = ones(2,3)
a .+ b
a .- b
a * b # error
a .* b
a * b'
a / b
a ./ b

函数对矩阵操作时,也要加.

A = [1,2,3]
sin.(A)
>>3-element Array{Float64,1}:
 0.8414709848078965
 0.9092974268256817
 0.1411200080598672

添加/删除/移动

a = [1,2,3]
push!(a, 4)
pop!(a)
push!(a, 4,5,6)
push!(a, [7,8,9])
>>error
append!(a, [7,8,9])
prepend!(a, [10,11,12])

arr = reshape(1:6, 2, 3)
circshift(arr, (0,1))
circshift(arr, (1,-2))

对于矩阵的基本操作中,很多matlab中的函数Julia中基本也有,用法也基本一致

eg.

rand(10)
rand(2,3)
rand(Int32,2,3)
reshape(1:6, (2,3))

注:如果有些常用的数学函数发现在Julia中不能使用,比如mean()函数,则可以使用Statistics package。常用的数值分析的函数都在里面。

728d806232fb6a81b63ac9e4d8feeba2.png

在网易云课堂上搜索《Julia教程 从入门到进阶》可以看到所有免费教程视频

微信公众号:Quant_Times

Julia系列教程

1 Julia简介及安装

2 REPL的使用及Julia中的变量

3 数学运算 矩阵运算

4 函数 方法 多重分派

5 控制流

6 类型

7 绘图

8 文件操作

9 模块

10 元编程

11 并行计算

12 科学计算

13 如果写出高性能的Julia代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值