numpy
作者:互联网
暑假的小存货~
numpy库
numpy库最重要的对象是新定义n维数组 \(ndarray\)
创建
\(numpy.array()\)
import numpy as np
a = np.array([1,2,3])
type(a) #<class 'numpy.ndarray'>
\(np.zeros((n,m))\)
np.zeros((2,3))
array([[0., 0., 0.],
[0., 0., 0.]])
\(np.ones((n,m))\)
np.zeros((2,3))
array([[0., 0., 0.],
[0., 0., 0.]])
\(np.arange(n)\)
np.arange(6)
array([0, 1, 2, 3, 4, 5])
np.arange(0,10,2)
array([0, 2, 4, 6, 8])
\(np.linspace()\)
np.linspace(1,12,12)
array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12.])
np.linspace(0,1,10)
array([0. , 0.11111111, 0.22222222, 0.33333333, 0.44444444,
0.55555556, 0.66666667, 0.77777778, 0.88888889, 1. ])
\(np.random.randint((a,b,(n,m)))\)
np.random.randint(0,10,(2,3))
array([[0, 5, 5],
[3, 5, 4]])
特性
\(ndarray.ndim\) 维度的数量
\(ndarray.size\) 元素的数量
\(ndarray.dtype\) 数组中元素的数据类型
\(ndarray.itemsize\) 数组中元素所占字节数
\(ndarray.shape\) 返回数组的形状
\(ndarray.reshape\) 改变数组的形状
b=np.random.randint(0,10,(2,3))
>>> b
array([[3, 5, 1],
[1, 4, 2]])
>>> b.shape
(2, 3)
>>> b.reshape(b.size)
array([3, 5, 1, 1, 4, 2])
索引
建立两个 \(ndarray\) 如下
>>> a=np.arange(12).reshape(3,4)
>>> a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>> b=np.array([1,2,3])
>>> b
array([1, 2, 3])
单值索引
类似于c语言中数组操作
>>> a[0]
array([0, 1, 2, 3])
>>> a[1]
array([4, 5, 6, 7])
>>> a[2]
array([ 8, 9, 10, 11])
>>> a[1][0]
4
切片索引
>>> a[:,1:3]
array([[ 1, 2],
[ 5, 6],
[ 9, 10]])
>>> a[:,0]
array([0, 4, 8])
列表索引
>>> a[[1,0,2]]
array([[ 4, 5, 6, 7],
[ 0, 1, 2, 3],
[ 8, 9, 10, 11]])
#第1行,第0行,第2行
布尔索引
通过布尔表达式进行索引
>>> a[a>5]
array([ 6, 7, 8, 9, 10, 11])
运算
广播运算
>>> a=np.random.randint(100,200,(3,4))
>>> a
array([[116, 177, 192, 193],
[171, 171, 101, 165],
[172, 161, 128, 170]])
>>> a>150
array([[False, True, True, True],
[ True, True, False, True],
[ True, True, False, True]])
>>> a[a>150]=100
>>> a
array([[116, 100, 100, 100],
[100, 100, 101, 100],
[100, 100, 128, 100]])
标量运算
\(numpy\) 库提供了一些数学运算符
\(\sin \quad \sinh\quad\arcsin\quad\cos...\)
\(ceil\quad fix\quad round\quad floor\)
\(mod\quad sqrt\quad abs\quad sign\)
np.sin(a)
array([[ 0.23666139, -0.50636564, -0.50636564, -0.50636564],
[-0.50636564, -0.50636564, 0.45202579, -0.50636564],
[-0.50636564, -0.50636564, 0.72103771, -0.50636564]])
矩阵运算
点乘
>>> a=np.linspace(1,6,6).reshape(2,3)
>>> a
array([[1., 2., 3.],
[4., 5., 6.]])
>>> b=np.linspace(1,6,6).reshape(3,2)
>>> b
array([[1., 2.],
[3., 4.],
[5., 6.]])
>>> a.dot(b)
array([[22., 28.],
[49., 64.]])
星乘
矩阵对应元素相乘
>>> a=np.linspace(1,6,6).reshape(2,3)
>>> a*a
array([[ 1., 4., 9.],
[16., 25., 36.]])
四则运算
>>> a=np.arange(9).reshape(3,3)
>>> a
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> b=np.array([10,10,10])
>>> print(np.add(a,b))
[[10 11 12]
[13 14 15]
[16 17 18]]
>>> print(np.subtract(a,b))
[[-10 -9 -8]
[ -7 -6 -5]
[ -4 -3 -2]]
>>> print(np.multiply(a,b))
[[ 0 10 20]
[30 40 50]
[60 70 80]]
>>> print(np.divide(a,b))
[[0. 0.1 0.2]
[0.3 0.4 0.5]
[0.6 0.7 0.8]]
操作
广播
当矩阵操作需要两矩阵形状相同却不相同时,会利用广播机制强行使其相同
>>> a=np.linspace(1,12,12).reshape(4,3)
>>> a
array([[ 1., 2., 3.],
[ 4., 5., 6.],
[ 7., 8., 9.],
[10., 11., 12.]])
>>> b=np.array([0,1,2])
>>> b
array([0, 1, 2])
>>> a+b
array([[ 1., 3., 5.],
[ 4., 6., 8.],
[ 7., 9., 11.],
[10., 12., 14.]])
在执行矩阵加法时,广播机制强制改变b矩阵,使其c成为每一行都是 \([0,1,2]\) 的 3x4 矩阵
统计函数
\(np.amin()\)
\(np.amax()\)
>>> a=np.array([[3,7,5],[8,4,3],[2,4,9]])
>>> a
array([[3, 7, 5],
[8, 4, 3],
[2, 4, 9]])
>>> np.amin(a,1)
array([3, 3, 2])
>>> np.amin(a,0)
array([2, 4, 3])
标签:10,numpy,np,quad,array,True,100 来源: https://www.cnblogs.com/misasteria/p/16596433.html