python科学计算是什么意思_Python科学计算和数据分析
(NumPy详细介绍)
本⽂介绍的科学计算、数据分析必备基础知识。
本⽂全⽂约2600字,阅读时间约15分钟,请你耐⼼观看。
本⽂使⽤的开发环境是Python3.8,Numpy版本是1.19,本⽂的例⼦全部经过验证,你可以直接使⽤。
NumPy是NumericalPython的简称,它是Python科学计算的基础包。这种⼯具可⽤来存储和处理⼤型矩阵,⽐Python⾃带的列表处理
性能⾼很多,可⽀持数学、逻辑、排序、傅⾥叶、线性代数、统计操作等。
NumPy提供了⼀个N维数组类型ndarray,它描述了“相同类型”的对象集合。ndarray结构
ndarray在存储数据时,数据与数据的地址都是连续的,当⾯对⼤量计算时,NumPy会⾃动做并⾏计算。NumPy底层使⽤C语⾔编写,数
组中直接存储对象,⽽不是对象指针,因此NumPy的运算效率远⾼于Python⾃带的列表类型。
本⽂按照如下结构展开:创建ndarray
数据类型
索引和切⽚
数组转置和轴对称
通⽤函数
1.创建
array函数
创建NumPy最简单的⽅法就是使⽤array函数。它接受⼀切序列型的对象,然后产⽣⼀个新的含有传⼊数据的NumPy数组。以⼀个列表的
转换为例。
>>>data1=[100,30,3,54,15]
>>>arr1=(data1)
>>>arr1
array([100,30,3,54,15])
asarray函数
这个函数的功能与array函数接近,将输⼊转换为ndarray。
>>>importnumpyasnp
>>>data2=[10,20,30,50,100]
>>>arr2=y(data2)
>>>arr2
array([10,20,30,50,100])
与array函数不同的是,如果输⼊本⾝就是⼀个ndarray,就不进⾏复制。
>>>data3=[100,200,300,400,1000]
>>>arr3=(data3)
>>>arr4=y(arr3)
>>>arr5=(arr3)
#传⼊的是列表,asarray产⽣⼀个新的ndarray
>>>print(arr3isarr5)
Fal
#传⼊的是ndarray,asarray不产⽣新的ndarray
>>>print(arr3isarr4)
True
arange函数
类似于内置的range函数,但返回的是⼀个ndarray⽽不是列表。
#不指定起始位置和间隔,默认起始位置是0,间隔是1
>>>arr5=(15)
>>>arr5
array([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14])
#指定起始位置和间隔
>>>arr6=(1,50,3)
>>>arr6
array([1,4,7,10,13,16,19,22,25,28,31,34,37,40,43,46,49])
ones函数
根据指定的形状创建⼀个全1数组。
#创建⼀个全1的1维数组,长度是20
>>>arr7=(20)
>>>arr7
array([1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,
1.,1.,1.])
#创建⼀个全1的2维数组,20⾏10列。
>>>arr8=((20,10))
>>>arr8
array([[1.,1.,1.,1.,1.,1.,1.,1.,1.,1.],
[1.,1.,1.,1.,1.,1.,1.,1.,1.,1.],
[1.,1.,1.,1.,1.,1.,1.,1.,1.,1.],
[1.,1.,1.,1.,1.,1.,1.,1.,1.,1.],
[1.,1.,1.,1.,1.,1.,1.,1.,1.,1.],
[1.,1.,1.,1.,1.,1.,1.,1.,1.,1.],
[1.,1.,1.,1.,1.,1.,1.,1.,1.,1.],
[1.,1.,1.,1.,1.,1.,1.,1.,1.,1.],
[1.,1.,1.,1.,1.,1.,1.,1.,1.,1.],
[1.,1.,1.,1.,1.,1.,1.,1.,1.,1.],
[1.,1.,1.,1.,1.,1.,1.,1.,1.,1.],
[1.,1.,1.,1.,1.,1.,1.,1.,1.,1.],
[1.,1.,1.,1.,1.,1.,1.,1.,1.,1.],
[1.,1.,1.,1.,1.,1.,1.,1.,1.,1.],
[1.,1.,1.,1.,1.,1.,1.,1.,1.,1.],
[1.,1.,1.,1.,1.,1.,1.,1.,1.,1.],
[1.,1.,1.,1.,1.,1.,1.,1.,1.,1.],
[1.,1.,1.,1.,1.,1.,1.,1.,1.,1.],
[1.,1.,1.,1.,1.,1.,1.,1.,1.,1.],
[1.,1.,1.,1.,1.,1.,1.,1.,1.,1.]])
zeros函数
类似于ones函数,只不过产⽣的是全0数组⽽已。
>>>arr9=(20)
>>>arr9
array([0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,
0.,0.,0.])
empty函数
创建新数组,只分配内存空间但不填充任何值。
>>>arr10=(15)
>>>arr10
array([6.23042070e-307,7.56587584e-307,1.37961302e-306,1.05699242e-307,
8.01097889e-307,1.78020169e-306,7.56601165e-307,1.02359984e-306,
1.33510679e-306,2.22522597e-306,1.11260144e-306,6.89812281e-307,
2.22522596e-306,0.00000000e+000,0.00000000e+000])
2.数据类型
在上⼀节的基础上,我们介绍dtype,dtype是⼀个特殊的对象,它可以解释ndarray包含的信息。
>>>arr10=([1,2,3],dtype=64)
>>>
dtype('float64')
>>>arr11=([1,2,3],dtype=32)
>>>
dtype('int32')
dtype是Numpy如此强⼤和灵活的原因之⼀,多数情况下,它们直接映射到相应的机器表⽰。
Numpy中处理的数据类型很多,包括浮点数、复数、整数、字符串等。具体来说,如下所⽰。类型说明
int8、uint8有符号和⽆符号的8位(1个字节)整型
int16、uint16有符号和⽆符号的16位(2个字节)整型
int32、uint32有符号和⽆符号的32位(4个字节)整型
int64、uint64有符号和⽆符号的64位(8个字节)整型
float16半精度浮点型
float32标准的单精度浮点型
float64标准的双进度浮点型
float128扩展精度浮点型
complex64分别⽤两个32位浮点数表⽰的复数
complex128分别⽤两个64位浮点数表⽰的复数
complex256分别⽤两个128位浮点数表⽰的复数
objectPython对象类型
string_固定长度的字符串类型
unicode_固定长度的unicode类型
数据类型转换
可以通过ndarray的astype⽅法显⽰地转换其dtype,下⾯的例⼦是将整数显⽰地转换为float64类型。
>>>arr=([1,2,3,4,5])
>>>
dtype('int32')
#将数据类型转换为float64
>>>float_arr=(64)
>>>float_arr
array([1.,2.,3.,4.,5.])
>>>float_
dtype('float64')
也可以将浮点型转换为整数,则⼩数部分将会被截断。
>>>arr=([3.7,-1.2,-10.6,0.88,10.1])
>>>arr
array([3.7,-1.2,-10.6,0.88,10.1])
#将浮点型转换为整型
>>>int_arr=(32)
>>>int_arr
array([3,-1,-10,0,10])
>>>int_
dtype('int32')
3.索引和切⽚
本节将介绍NumPy数组的索引,选取数据的⼦集或单个元素的⽅式有很多种。
>>>arr=(10,100,10)
>>>arr
array([10,20,30,40,50,60,70,80,90])
>>>arr[5]
60
>>>arr[5:8]
array([60,70,80])
>>>arr[5:8]=666
>>>arr
array([10,20,30,40,50,666,666,666,90])
NumPy数组切⽚是原始数据,对新切⽚的操作都将直接作⽤到原始数据上,由于NumPy的设计⽬的是处理⼤数据,如果每次操作都将复制
的话,会降低性能和带来内存问题。
如果想要的是ndarray切⽚的⼀个副本,⽽不是原始数据。就需要显⽰地进⾏复制操作,调⽤copy()函数。
>>>arr
array([10,20,30,40,50,666,666,666,90])
>>>arr2=arr[5:8].copy()
>>>arr
array([10,20,30,40,50,666,666,666,90])
#对arr[5:8]的修改,作⽤于原始数据。
>>>arr[5:8]=777
>>>arr
array([10,20,30,40,50,777,777,777,90])
#对arr2的修改,并不作⽤于原始数据。
>>>arr2=123
>>>arr
array([10,20,30,40,50,777,777,777,90])
4.数组转置
数组转置是将矩阵的⾏和列进⾏变换。
>>>arr=(15).reshape(3,5)
>>>arr
array([[0,1,2,3,4],
[5,6,7,8,9],
[10,11,12,13,14]])
>>>arr.T
array([[0,5,10],
[1,6,11],
[2,7,12],
[3,8,13],
[4,9,14]])
5.通⽤函数
通⽤函数(即ufunc)是⼀种对ndarray中的数据执⾏元素级运算的函数。
>>>arr=([-0.5,-1.1,1.4,-3.5])
>>>arr
[-0.5,-1.1,1.4,-3.5]
>>>(arr)
array([0.5,1.1,1.4,3.5])
>>>(arr)
array([0.25,1.21,1.96,12.25])
上⾯的例⼦是⼀元ufunc的。
完整的⼀元ufunc列举如下:函数说明
abs、fabs计算整数、浮点数或复数的绝对值。对于⾮复数值,可以使⽤更快的fabs
sqrt计算各元素的平⽅根
square计算各元素的平⽅。
exp计算各元素的指数(e为底数)
log、log10、log2分别对⾃然对数(底数为e)、底数为10的log、底数为2的log
sign计算各元素的正负号:1(正数)、0(零)、-1(负数)
ceil计算各元素的ceiling值,即⼤于等于该值的最⼩整数
floor计算各元素的floor值,即⼩于等于该值的最⼤整数
rint将各元素值四舍五⼊到最接近的整数
isnan返回⼀个表⽰“哪些值是Nan”的布尔型数组
isfinite、isinf分别返回⼀个表⽰“哪些元素是有穷的”或“哪些元素是⽆穷的”布尔型数组
cos、cosh、sin、sinh、tan、tanh普通型和双曲型三⾓函数
arccos、arccosh、arcsin、arcsinh、arctan、arctanh反三⾓函数
这⾥使⽤普通三⾓函数举例。
>>>data1=([/2,/6,/6,/3,/2])
>>>(data1)
array([1.,0.5,0.5,0.8660254,1.])
⼆元ufunc函数函数说明
add将数组中对应的元素相加
subtract从第⼀个数组中减去第⼆个数组中的元素
multiply数组相应的元素相乘
divide数组相应的元素相除
power对第⼀个数组中的元素A,根据第⼆个数组中的相应元素B,计算A的B次⽅
maximum元素级的最⼤值计算
minimum元素级的最⼩值计算
mod元素级的求模计算
copysign将第⼆个数组中的值的符号复制给第⼀个数组中的值
greater、greater_equal、less、less_equal、equal、not_equal执⾏元素级的⽐较运算,最终产⽣布尔值数组。相对于运算符>、≥、
<、≤、==、!=
logical_and、logical_or、logical_xor执⾏元素级的真值逻辑运算。相当于运算符&、|、^
>>>data2=([10,20,30,40,50])
>>>data3=([20,30,40,50,60])
>>>data4=([2,3,4,5,4])
>>>(data2,data3)
array([30,50,70,90,110])
>>>ct(data2,data3)
array([-10,-10,-10,-10,-10])
>>>ly(data2,data3)
array([200,600,1200,2000,3000])
>>>(data2,data4)
array([100,8000,810000,102400000,6250000],dtype=int32)
>>>(data3,data2)
array([0,10,10,10,10],dtype=int32)
>>>r(data2,data3)
array([Fal,Fal,Fal,Fal,Fal])
>>>r_equal(data2,data3)
array([Fal,Fal,Fal,Fal,Fal])
>>>(data2,data3)
array([True,True,True,True,True])
>>>_equal(data2,data3)
array([True,True,True,True,True])
>>>(data2,data3)
array([Fal,Fal,Fal,Fal,Fal])
>>>_equal(data2,data3)
array([True,True,True,True,True])
>>>data5=([True,True,Fal,Fal,True])
>>>data6=([Fal,True,True,True,Fal])
>>>l_and(data5,data6)
array([Fal,True,Fal,Fal,Fal])
>>>l_or(data5,data6)
array([True,True,True,True,True])
>>>l_xor(data5,data6)
array([True,Fal,True,True,True])
码字不易,如果真的解决了您的问题。
请您点赞⽀持。
您可以关注我,我会持续回答计算机相关问题。
我有2个Python专栏。1个专门针对Python初学者,⼿把⼿教你⼊门Python;1个专门介绍强⼤的第三⽅库。
本文发布于:2022-11-12 11:14:20,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/88/4202.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |