其他分享
首页 > 其他分享> > numpy

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