1.Numpy基础知识
学习网站:https://juejin.im/post/5a76d2c56fb9a063557d8357
引入numpy库,我的习惯是用np代替
import numpy as np
Numpy是python中最常用的库之一,其主要操作对象为多维数组。它是一个有正整数做索引,元素类型相同的表。其中维度称为axes,axes的数量为rank(维数)
例如一个二维数组
[[ 1., 0., 0. ],
[ 0., 1., 2. ]]
维度rank = 2,第一维axes长度为2,第二维axes长度为3
Numpy的数组类型为ndarray,也可以称为array,注意区分numpy.array和标准py库里的array.array的区别:它只能处理一维数组且只能提供部分功能
ndarray的一些重要属性
narray.ndim
数组的维度axes大小即rank
ndarray.shape
数组的维数,是每个维度大小组成的元组,n行m列的矩阵,shape是(n,m)
ndarray.dtype
数组描述元素类型的对象,它是一种可以用标准python类型创建和指定的类型
ndarray.itemsize
数组中每个元素所占的字节数,如float64的itemsize是8(64/8bit),它与ndarray.dtype.itemsize相等
ndarray.data
数组实际元素的缓冲区,通过索引访问即可
2.Numpy测试
创建数组
利用array函数,传入数字列表创建
import numpy as np
a = np.array([1,2,3])
print(a)
高维数组利用多个列表即可,也可以传参指定数组类型,如
import numpy as np
a=np.array([[1,2,1],[3,4,5]],dtype=complex)
print(a)
>>>[[ 1.+0.j 2.+0.j 1.+0.j]
[ 3.+0.j 4.+0.j 5.+0.j]]
zeros创建全为0的数组,ones是全为1的数组,empty创建随机数组,默认类型是float64,可以通过改变dtype属性改变
numpy的arange方法返回一个数组,参数是浮点型,前两个参数是范围,第三个参数是步长如
np.arange(10,30,5)
>>>array([10,15,20,25])
与其相似的是函数linspace,接受元素数量作为参数,步长根据数量自动划分
np.linspace(0,2,9) #9 numbers from 0-2
用于多个数的数据处理十分方便
import numpy as np
from numpy import pi
x = np.linspace(0,2*pi,100)
f=np.sin(x)
print(type(f))
>>><class 'numpy.ndarray'>
返回一个多个数据的数组
打印数组用arange和reshape函数可以实现矩阵输出
数组太大的情况下numpy会自动只保留角上的数据,可以通过以下代码实现打印所有数组
np.set_printoptions(threshold='nan')
基本操作
加减操作
b**2 #b所有数组元素乘方
10*np.sin(a)
a<35 #输出相应的bool值,设置dtype = bool
矩阵乘法通过dot函数进行模拟
A.dot(B)
A*B 输出的数组元素为相应元素的积
+= *= 等操作直接在原数组做修改,不会创建新数组
不同类型的数组操作,数组类型趋向于更普通或更精确的一种(向上转型)
很多类似求数组元素求和的一元操作都是有ndarray方法确定的