Numpy简要

介绍

NumPy是Python中的科学计算的基础包,不是Python的标准库,是第三方包。

提供对象

NumPy提供了两种对象:ndarray和ufunc。

ndarray是储存单一数据类型的多维数组。
ufunc是能够对数组进行处理的函数。

功能

  1. N维数组,一种快速,高效使用内存的多维数组,提供矢量化数学计算。
  2. 不需要使用循环,就能对整个数组内数组进行标准数学运算。
  3. 线性代数,随机数生成以及傅里叶变换等功能。
  4. 可以方便把数据传送到其他外部库,也便于(例如C,C++编写的)外部库以NumPy数组形式返回。

注意NumPy本身不提供高级数据分析功能,可以使用Pandas之类的工具。

Numpy使用

创建NumPy数组

数组建立

这里建立一个一维数组,当然也可以建立多维数组。

#导入NumPy包,别名np
import numpy as np

#array()函数创建ndarray数组
a=np.array([2,4,6])

print(a)

输出一维数组:

[2 4 6]

数组元素定义复数

a=np.array([3,4,6],dtype=complex)

输出的一维数组

[3.+0.j 4.+0.j 6.+0.j]

NumPy特殊数组

NumPy有3种特殊数组:zero数组;ones数组;empty数组。

zero数组

zero数组是全0的数组,一般用于初始化步骤。

数组默认类型是浮点数,可以指定为整数,同时支持多维数组生成。

#导入NumPy包,别名np
import numpy as np

#一维
a=np.zeros(3)

#类型默认为浮点数,可以定义为整型
b=np.zeros(3,dtype=int)

#多维数组
c=np.zeros((3,2),dtype=int)

print(a)
print(b)
print(c)

输出结果:

[0. 0. 0.]

[0 0 0]

[[0 0]
 [0 0]
 [0 0]]

ones数组

ones数组是全1的数组。

数组默认类型是浮点数,可以指定为整数,同时支持多维数组生成。

#导入NumPy包,别名np
import numpy as np

#一维
a=np.ones(3)

#类型默认为浮点数,可以定义为整型
b=np.ones(3,dtype=int)

#多维数组
c=np.ones((3,2),dtype=int)

print(a)
print(b)
print(c)

输出结果:

[1. 1. 1.]

[1 1 1]

[[1 1]
 [1 1]
 [1 1]]

empty数组

empty数组是指空数组,即数组中所有元素全部近似等于0。

#导入NumPy包,别名np
import numpy as np

a=np.empty((2,3))

print(a)

输出结果:

[[6.23042070e-307 3.56043053e-307 1.37961641e-306]
 [1.11261027e-306 1.69120009e-306 7.23188049e-308]]

NumPy序列数组

NumPy的arange函数与Python的range函数功能类似。参数都是开始值,结束值和步长。不过相较于Python的range,NumPy的步长可以为浮点数。

#导入NumPy包,别名np
import numpy as np

a=np.arange(1,20,5)
b=np.arange(1.1,20,2.4)

print(a)
print(b)

输出结果:

[ 1  6 11 16]
[ 1.1  3.5  5.9  8.3 10.7 13.1 15.5 17.9]

linspace函数可以快速创建等差序列数组。其参数为开始值,结束值,元素数量。

#导入NumPy包,别名np
import numpy as np

#生成1-10,数量一共5个
a=np.linspace(1,10,5)

print(a)

输出结果:

[ 1.    3.25  5.5   7.75 10.  ]

NumPy数组索引

NumPy数组的每个,每行,每列元素都可以用索引访问。
注意索引值从0开始。

首先定义一个多维数组

#导入NumPy包,别名np
import numpy as np

a=np.array([[1,2,3],[4,5,6]])

print(a)

输出结果:

[[1 2 3]
 [4 5 6]]

开始查询

#导入NumPy包,别名np
import numpy as np
a=np.array([[1,2,3],[4,5,6]])

#第一个元素
a1=a[0]
#[1 2 3]

#第二个元素
a2=a[1]
#[4 5 6]

#第1行第2列里面的元素
a3=a[0,1]
#2

#第二列元素
a4=a[:,1]
#[2 5]

#第二行元素
a5=a[1,:]
#[4 5 6]

print(a1)
print(a2)
print(a3)
print(a4)
print(a5)

输出结果:

[1 2 3]
[4 5 6]
2
[2 5]
[4 5 6]

NumPy数组运算

NumPy数组元素的加,减,乘,除,乘方,最大值,最小值等运算。

#导入NumPy包,别名np
import numpy as np

a=np.array([1,2,3])
b=np.array([4,5,6])

#加法
a1=a+b
#[5 7 9]

#减法
a2=a-b
#[-3 -3 -3]

#乘法
a3=a*b
#[ 4 10 18]

#除法
a4=a/b
#[0.25 0.4  0.5 ]

#乘方
a5=a**2
#[1 4 9]

#判断
a6=a>b
#[False False False]

a7=a<b
#[ True  True  True]

#最大值
a8=a.max()
#3

#最小值
a9=a.min()
#1

print(a1)
print(a2)
print(a3)
print(a4)
print(a5)
print(a6)
print(a7)
print(a8)
print(a9)

输出结果:

[5 7 9]
[-3 -3 -3]
[ 4 10 18]
[0.25 0.4  0.5 ]
[1 4 9]
[False False False]
[ True  True  True]
3
1

NumPy数组复制

复制分为两种——浅复制和深复制。

浅复制,修改任何一个都会改变。

#导入NumPy包,别名np
import numpy as np

a=np.array([1,2,3])

b=a
print(a)
print(b)
#[1 2 3]
#[1 2 3]


#仅修改b里面的值,输出的a里面的值也变了
#具体的原因是因为两者的地址是一样的
b[1]=10

print(a)
print(b)
#[ 1 10  3]
#[ 1 10  3]

输出结果:

[1 2 3]
[1 2 3]
[ 1 10  3]
[ 1 10  3]

深复制,修改其中一个另一个不会改变。函数copy()。

#导入NumPy包,别名np
import numpy as np

a=np.array([1,2,3])

b=a.copy()
print(a)
print(b)
#[1 2 3]
#[1 2 3]


#仅修改b里面的值,输出的a里面的值没变
#具体的原因是因为两者的地址分开存放
b[1]=10

print(a)
print(b)
#[ 1 2  3]
#[ 1 10  3] 

NumPy矩阵

矩阵用matrix()函数创建。

#导入NumPy包,别名np
import numpy as np

a=np.matrix([[1,2,3],[4,5,6]])

print(a)

#矩阵转置
b=a.T
print(b)

#矩阵相乘
c=a*b
print(c)

矩阵求逆
d=a.I
print(d)

输出结果:

[[1 2 3]
 [4 5 6]]
 
[[1 4]
 [2 5]
 [3 6]]
 
[[14 32]
 [32 77]]
 
[[-0.94444444  0.44444444]
 [-0.11111111  0.11111111]
 [ 0.72222222 -0.22222222]]
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐