这里我们选择python3.7和64位操作系统
Python shell、Python IDLE、IPython shell、Spyder(推荐使用)、Jupyter Notebook、Sublime Text、Pycharm、Eclipse Pydev插件、Visual Studio Code
注:
数组只可以保存相同类型的数据,二列表可以保存任何类型的数据
import numpy as np
a=np.array([1,2,3,4],dtype=np.int64)
print(a,a.dtype)
- aranger()函数
我们可以使用arange()函数创建数值范围并返回数组对象
numpy.arange(start,stop,step,dtype)
- linspace()函数
我们可以使用linspace()函数创建等差数组
numpy.linspace(start,stop,num,endpoint,retstep,dtype)
- logspace()函数
我们可以使用logsapce()函数创建等比数组
numpy.logspace(start,stop,num,endpoint,base,dtype)
# %% 初始值为0,结束值不为10,步长1
import numpy as np
a=np.arange(10)
print(a)
# %%初始值为1,结束值不为10,步长为2
b=np.arange(start=1,stop=10,step=2)
print(b)
# %%将数据类型改为双精度浮点型‘f8’
c=np.arange(1,10,2,dtype=np.float64)
print(c,c.dtype)
# %%初始值为1,结束值不为-10,步长-3
d=np.arange(1,-10,-3)
print(d)
# %%初始值为0,结束为10,个数9
e=np.linspace(0,10,9)
print(e)
# %%结束值不为10,个数10
f=np.linspace(0,10,10,endpoint=False)
print(f)
# %%初始值为10**0 结束值为10**3,个数4
g=np.logspace(0,3,4)
print(g)
# %%base=2 个数4
h=np.logspace(0,3,4,base=2)
print(h)
numpy.array(object),参数object类型可以是列表或者元组
import numpy as np
a=np.array([[1,2,3],[4,5,6]])
print(a)
import numpy as np
a=[[1,2,3],[4,5,6]]
b=np.array(a)
print(b)
# %% 转置
c=b.T
print(c)
1. ones()函数
根据指定的形状和数据类型生成全为1的数组
numpy.ones(shape,dtype=None)
shape:数组的形状
2. zeros()函数
根据指定的形状和数据类型生成全为0的数组
numpy.zeros(shape,dtype=None)
shape:数组的形状
3.full()函数
根据指定的形状和数据类型生成数组,并指定数据填充
numpy.full(shape,fill_value,dtype=None)
fill_value:指定填充的数据
4.identity()函数
创建单位矩阵(即对角线元素为1,其他元素为0的矩阵)
numpy.identity(n,dtype=None)
n :数组的形状
# %% ones()
import numpy as np
a=np.ones([2,3],dtype=np.int32)
print(a)
# %% zeros()
b=np.zeros([3,4])
print(b)
# %% full()
c=np.full([2,3],10.)
print(c)
# %% identity()
d=np.identity(6)
print(d)
# %%一维数组的索引访问
import numpy as np
a=np.array([1,2,3,4,5])
print(a[4],a[-1])
# %%二维数组的索引和访问 输出为9
b=np.array([[1,2,3],[4,5,6],[7,8,9]])
print(b[2][2])
# %% 或者print(b[2,2])
一维数组切片访问与Python内置序列类型切片访问一样
注:切片包括start位置元素,但不包括end位置元素
二维数组的切片访问
ndarray[所在0轴切片,所在1轴切片]
# %% 一维数组的切片访问方式
import numpy as np
a=np.array([1,2,3,4])
print(a[1:3])
# %%输出2,3
print([:3])
# %% 输出1,2,3
print([1:])
# %%输出2,3,4
print([:])
# %%输出1,2,3,4
print(a[1:-1])
# %% 输出2,3
# %%二维数组的切片方式
b=np.array([[1,2,3],
[4,5,6],
[7,8,9]])
print(b[0:2,1:2],shape)
# %%输出(2,1)
print(b[:2,1:])
# %% 输出[[2,3],[5,6]]
1.布尔索引必须与要索引的数组形状相同,否则会发生IndexError错误
2.不二索引返回的新数组是原来数组的副本,与原数组不共享相同的数据空间,即新数组的修改不会改变原数组(深层复制)
# %%一维数组的布尔索引
import numpy as np
a1=np.array([1,2,3,4])
b1=np.array([True,False,True,False])
print(a1[b1])
# %% 输出结果[1,3]
# %%二维数组的布尔索引
a2=np.array([[1,2,3],[4,5,6],[7,8,9]])
b2=np.array([True,False,True],
[True,False,True],
[True,False,True]])
print(a2[b2])
# %% 输出结果[1,3,4,6,7,9]
# %%深层复制和浅层复制
a3=np.array([1,2,3])
b3=np.array([False,True,True])
c=a3[b3]
print(c)
# %% 输出[2,3]
c[1]=100
print(c)
# %% 输出[2,100]
print(a3)
# %% 输出[1,2,3]
# %% 一维数组的花式索引
import numpy as np
a1=np.array([1,2,3,4,5,6])
b=[1,2,3,4]
print(a1[b])
# %% 输出结果为[2,3,4,5]
c=np.array([1,2,3,4])
print(a1[c])
# %% 输出结果为[2,3,4,5]
d=np.array([[1,2],
[3,4])
print(a1[d])
# %% 输出结果为[[2,3]
[4,5]]
# %%二维数组的花式索引
a2=np.array([[1,2,3],
[4,5,6],
[7,8,9]])
m=[1,2]
n=[0,1]
print(a2[m,n])
# %% 输出结果为[4,8]
该函数指沿指定的轴连接多个数组
numpy.concatenate((a1,a2,a3…,),axis)
a1,a2是要连接的数组。注意,除了指定轴外,其它轴元素的个数必须相同
axis是沿指定轴的索引,默认为0轴。
vstack()函数
沿垂直堆叠多个数组,相当于concatenate()函数axis=0的情况
numpy.vstack((a1,a2))
注:1轴上元素个数相同
hstack()函数
沿水平堆叠多个数组,相当于concatenate()函数axis=1的情况
numpy.hstack((a1,a2))
注:0轴上元素个数相同
# %% concatenate()
import numpy as np
a=np.array([[1,2],
[3,4]])
b=np.array([[5,6]])
ab=np.concatenate((a,b))
print(ab)
# %% 输出结果为 [[1,2]
[3,4]
[5,6]]
# %% vstack()
a=np.array([[1,2],
[3,4]])
b=np.array([[5,6]])
ab=np.vstack((a,b))
print(ab)
# %% 输出结果为 [[1,2]
[3,4]
[5,6]]
# %% hstack()
a=np.array([[1,2],
[3,4]])
b=np.array([[5,6]])'
bt=b.T
ab=np.hstack((a,bt))
print(ab)
# %% 输出结果为 [[1 2 5]
[3 4 6]]
# %% split() 一维数组(整数)
import numpy as np
a1=np.array([0,1,2,3,4,5,6,7,8])
b1=np.split(a1,3)
ptint(b1)
# %% 输出结果[array([0,1,2],array([3,4,5]),array([6,7,8])]
# %% split() 一维数组(数组)
a1=np.arange(9)
sections=np.array([4,7])
b1=np.split(a1,sections)
print(b1)
# %% 输出结果[array([0,1,2,3]),array([4,5,6]),array([7,8])]
# %% split()二位数组(整数)
a2=np.array([[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16]])
b2=np.split(a2,4)
print(b2)
# %% 输出结果为array([[1,2,3,4]]),array([[5,6,7,8]]),array([[9,10,11,12]]),array([[13,14,15,16]])
# %% split()二位数组(数组)
a2=np.array([[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16]])
sections=np.array([1,2])
b2=np.split(a2,sections)
print(b2)
# %% 输出结果为
array([[1,2,3,4]]),array([[5,6,7,8]]),array([[9,10,11,12],[13,14,15,16]])
# %% vsplit()二位数组(整数)
a2=np.array([[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16]])
b2=np.split(a2,4)
print(b2)
b3=np.vsplit(a2,4)
print(b3)
运算符 | 描述 |
---|---|
+ | 加 |
- | 减法 |
* | 乘法 |
/ | 除法 |
// | 乘整除,返回商的整数部分 |
% | 取余 |
** | 次幂 |
数组与不同形状的数组进行算术运算时,会发生广播,需要遵守以下广播原则
先比较形状,再比较维度,后比较对应轴长度
如果两个数组维度不相等,会在维度较低数组的形状左侧填充1,直到维度与高维数组相等
如果两个数组维度相等时,要么对应轴的长度相同,要么其中一个轴的长度为1,则兼容的数组可以广播,长度为1的轴会被扩展。
# %% 数组与标量
import numpy as np
a1=np.array([1,3,5])
print(a1+2)
% ## 输出结果:[3,5,7]
# %% 数组与数组
a1=np.array([1,2])
b2=np.array([[3,4],
[5,6]])
print(a1+b2)
# %% 输出结果:[[4,6
rand()函数
该函数返回[0.0,1.0)的随机浮点数,即大于等于0.0,且小于1.0的随机浮点数
numpy.random.rand(d0,d1,…dn)
randint()函数
该函数返回[low,high)的随机整数,如果high省略,则返回[0,low)的随机整数
numpy.random.randint(low,high,size,dtype)
size:表示数组的形状
normal()函数
该函数返回正态分布随机数
numpy.random.normal(loc,scale,size)
loc:表示平均值
scale:表示标准差
randn()函数
该函数返回标准正态分布随机数,即平均数为0,标准差为1的正态分布随机数
numpy.random.randn(d0,d1,d2…dn)
# %%rand()
import numpy as np
a1=np.random.rand(10)
print(a1)
a2=np.random.rand(3,4)
print(a2)
# %% randint()
a1=np.random.randint(3,size=(5,))
print(a1)
# %% normal()
a2=np.random.normal(10,3,(3,4))
print(a2)
# %% randn()
a2=np.random.randn(3,4)
print(a2)
sort()函数
按照轴对数组行排序,即轴排序
numpy.sort(a,axis=-1,kind=‘quicksort’,order=None)
a:表示要排序的数组
axis:表示排序的轴索引,默认为-1,表示最后一个轴
kind:表示排序类型,quicksort:快速排序,为默认值,速度最快,mergesort:归并排序,heapsort:堆排序
order:表示排序字段
argsort()函数
按照轴对数组进行排序索引,即轴排序索引
numpy.argsort(a,axis=-1,kind=‘quicksort’,order=None)
# %% sort()
import numpy as np
a1=np.random.randint(0,10,size=(3,4))
print(a1)
a2=np.sort()
b2=np.sort(a2,axis=-1)
print(b2)
c2=np.sort(a2,axis=0)
print(C2)
# %% argsort()
a2=np.random.randint(0,10,size(3,4))
print(a2)
b2=np.argsort(a2)
print(b2)
求和
使用Numpy中sum()函数
numpy.sum(a,axis=None)
使用Numpy中nansum()函数,该函数忽略NaN
numpy.nansum(a,axis=None)
使用数组对象的sum()方法
numpy.ndarray.sum(axis=None)
求最大值
使用Numpy中的amax()函数
numpy.amax(a,axis=None)
使用Numpy中nanamax()函数,该函数忽略NaN
numpy.nanamax(a,axis=None)
使用数组对象的max()方法
numpy.ndarray.max(axis=None)
求最小值
使用Numpy中的amin()函数
numpy.amim(a,axis=None)
使用Numpy中nanamin()函数,该函数忽略NaN
numpy.nanamax(a,axis=None)
使用数组对象的min()方法
numpy.ndarray.min(axis=None)
求平均值
使用Numpy中的mean()函数
numpy.mean(a,axis=None)
使用Numpy中nanmean()函数,该函数忽略NaN
numpy.nanmean(a,axis=None)
使用数组对象的mean()方法
numpy.ndarray.mean(axis=None)
求加权平均值
使用Numpy中的average()函数
numpy.average(a,axis=None,weight=None)
weight表示权重
# %% save()
import numpy as np
a1=np.array([[1,2,3],
[4,5,6],
[7,8,9]])
np.save('array_save',a1)
# %% savez()
a1=np.array([[1,2,3],
[4,5,6],
[7,8,9]])
a2=np.array([1,2,3,4,5,6,7])
np.savez('array_saveZ',array_a1=a1,array_a2=a2)
# %% savez_compressed()
a1=np.array([[1,2,3],
[4,5,6],
[7,8,9]])
a2=np.array([1,2,3,4,5,6,7])
np.savez_compressed('array_savez_compressed',array_a1=a1,array_a2=a2)
import numpy as np
a2=np.load('array_save.npy')
print(a2)
a3=np.load('array_savez.npz')
print(a3[array_a1])
print(a3[array_a2])
a4=np.load('array_savez_conpressed.npz')
print(a4[array_a1])
print(a4[array_a2])