numpy基础(一)

发布于:2023-01-19 ⋅ 阅读:(411) ⋅ 点赞:(0)

学习目标:

  • Numpy介绍   
  • Numpy和Python原生语法实现对比
  • Numpy的核心array对象
  • 创建array的方法
  • array本身支持的大量操作和函数

学习内容:

  1. Numpy介绍          

NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 这种组合广泛用于替代 MatLab,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。

SciPy 是一个开源的 Python 算法库和数学工具包。

SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。

Matplotlib 是 Python 编程语言及其数值数学扩展包 NumPy 的可视化操作界面。它为利用通用的图形用户界面工具包,如 Tkinter, wxPython, Qt 或 GTK+ 向应用程序嵌入式绘图提供了应用程序接口(API)。

        2.Numpy和Python原生语法实现对比

打开jupyter book

import numpy as np
def python_sum(n):
    """ Python实现数组的加法
    @param n:数组的长度
    """
    a = [i**2 for i in range(n)]
    b = [i**3 for i in range(n)]
    c = []
    for i in range(n):
        c.append(a[i] + b[i])
    return c
def numpy_sum(n):
    """ numpy实现数组的加法
    @param n:数组的长度
    """
    a = np.arange(n) ** 2
    b = np.arange(n) ** 3
    return a+b
%timeit python_sum(1000)

1.06 ms ± 169 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

%timeit numpy_sum(1000)

9.16 µs ± 2.13 µs per loop (mean ± std. dev. of 7 runs, 100000 loops each)

显然numpy语法运行更快

        3.Numpy的核心array对象

例子:

打开jupyter 

import numpy as np

(1)创建一个一维数组,也就是Python的单元素List

# 创建一个一维数组,也就是Python的单元素List
x = np.array([1,2,3,4,5,6,7,8])
x

输出结果:array([1, 2, 3, 4, 5, 6, 7, 8])

(2)创建一个二维数组,也就是Python的嵌套List

# 创建一个二维数组,也就是Python的嵌套List
X = np.array(
    [
        [1,2,3,4],
        [5,6,7,8]
    ]
)

X

 输出结果:array([[1, 2, 3, 4],

                                [5, 6, 7, 8]])

(3)指定最小维度

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

输出结果:[[1 2 3 4 5]]

这个数组最小也要是二维数组 

(4)指定复数类型

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

输出结果:[1.+0.j 2.+0.j 3.+0.j]

(5)array的shape

x = np.array([1,2,3,4,5,6,7,8])
X = np.array(
    [
        [1,2,3,4],
        [5,6,7,8]
    ]
)


x.shape
X.shape

输出结果:(8,)

                (2, 4)

第一个是一个具有八个元素的向量

第二个是一个2行4列的矩阵

(6)array的ndim

x = np.array([1,2,3,4,5,6,7,8])
X = np.array(
    [
        [1,2,3,4],
        [5,6,7,8]
    ]
)

x.ndim
X.ndim

输出结果:1

                  2

第一个是一维向量

第二个是二维矩阵

(7)array的size

x = np.array([1,2,3,4,5,6,7,8])
X = np.array(
    [
        [1,2,3,4],
        [5,6,7,8]
    ]
)

x.size
X.size

输出结果:8

                  8

两个array都只有八个元素

(8)array的dtype(数据类型)

x = np.array([1,2,3,4,5,6,7,8])
X = np.array(
    [
        [1,2,3,4],
        [5,6,7,8]
    ]
)

x.dtype
X.dtype

输出结果:dtype('int32')

                  dtype('int32')

        4.创建array的方法

(1)arange

例子:

打开 jupyter 

np.arange(10)

 输出结果:array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

np.arange(2, 10, 2)

输出结果:array([2, 4, 6, 8])

(2)ones

例子:

打开jupyter

np.ones(10)

 输出结果:array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])

np.ones((2,3))

输出结果:array([[1., 1., 1.],

                            [1., 1., 1.]])

(3)ones_like

例子:

打开jupyter

x = np.array([1,2,3,4,5,6,7,8])
np.ones_like(x)

 输出结果 :array([1, 1, 1, 1, 1, 1, 1, 1])

X = np.array(
    [
        [1,2,3,4],
        [5,6,7,8]
    ]
)
np.ones_like(X)

输出结果:array([[1, 1, 1, 1],

                            [1, 1, 1, 1]])

利用已有的array,创建形状相同,但数值全为1的向量或矩阵

(4)zeros

例子:

打开jupyter

np.zeros(10)

 输出结果:array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])

np.zeros((2,4))

输出结果:array([[0., 0., 0., 0.],

                             [0., 0., 0., 0.]])

(5)zeros_like

例子:

打开jupyter

x = np.array([1,2,3,4,5,6,7,8])
np.zeros_like(x)

输出结果:array([0, 0, 0, 0, 0, 0, 0, 0])

X = np.array(
    [
        [1,2,3,4],
        [5,6,7,8]
    ]
)
np.zeros_like(X)

输出结果:array([[0, 0, 0, 0],

                            [0, 0, 0, 0]])

利用已有的array,创建形状相同,但数值全为0的向量或矩阵

(6)empty

例子:

打开jupyter

np.empty(10)

 输出结果:array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])

np.empty((2,4))

输出结果:array([[0., 0., 0., 0.],

                             [0., 0., 0., 0.]])

注意:数据是未初始化的,里面的值可能是随机值不要用

(7)empty_like

例子:

打开jupyter

x = np.array([1,2,3,4,5,6,7,8])
np.empty_like(x)

输出结果:array([0, 0, 0, 0, 0, 0, 0, 0])

X = np.array(
    [
        [1,2,3,4],
        [5,6,7,8]
    ]
)
np.empty_like(X)

输出结果:array([[0, 0, 0, 0],

                            [0, 0, 0, 0]])

利用已有的array,创建形状相同,但数值全为0的向量或矩阵

(8)full

例子:

打开jupyter

np.full(10, 666)

 输出结果:array([666, 666, 666, 666, 666, 666, 666, 666, 666, 666])

np.full((2,4), 333)

输出结果:array([[333, 333, 333, 333],

                            [333, 333, 333, 333]])

(9)full_like

例子:

打开jupyter

​x = np.array([1,2,3,4,5,6,7,8])
np.full_like(x)

输出结果:array([666, 666, 666, 666, 666, 666, 666, 666])

X = np.array(
    [
        [1,2,3,4],
        [5,6,7,8]
    ]
)
np.full_like(X)

输出结果:array([[666, 666, 666, 666],

                             [666, 666, 666, 666]])

利用已有的array,创建形状相同,但数值全为该函数第二个参数值的向量或矩阵

(10)random.randn

例子:

打开jupyter

np.random.randn()

 输出结果:1.1106391311802373

np.random.randn(3)

输出结果:array([0.30501947, 1.5935427 , 2.19706265])

np.random.randn(3, 2)

输出结果:array([[ 1.91805826, -0.67076574],

                            [-0.66382633, -0.32008601],

                            [-0.54977281, 0.84384816]])

np.random.randn(3, 2, 4)

array([[[ 0.7419018 , 0.22271303, -0.54512429, 0.48523073],

           [ 0.01613781, 0.74694664, -0.56695606, 0.20488094]],

          [[-0.08818788, 1.09166684, 0.38169304, -0.00319349],

           [ 1.01200773, -0.57815559, 0.63535043, 1.41703628]],

          [[-0.76849101, -1.50895899, 0.38588873, 0.97316552],

           [-0.60922509, 0.62118775, -0.70502845, -0.61426203]]])

返回随机数

(11)asarray

例子:

打开jupyter

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

 输出结果:array([1, 2, 3])

x =  (1,2,3) 
a = np.asarray(x)  
a

输出结果:array([1, 2, 3])

x =  [(1,2,3),(4,5)] 
a = np.asarray(x,dtype=object)  
a

输出结果:array([(1, 2, 3), (4, 5)], dtype=object)

x =  [1,2,3] 
a = np.asarray(x, dtype =  float)  
a

输出结果:array([1., 2., 3.])

(12)frombuffer

例子:

打开jupyter

s =  b'Hello World' 
a = np.frombuffer(s, dtype =  'S1') 
a

输出结果:array([b'H', b'e', b'l', b'l', b'o', b' ', b'W', b'o', b'r', b'l', b'd'], dtype='|S1')

(13)fromiter

例子:

打开jupyter

# 使用 range 函数创建列表对象  
list=range(5)
it=iter(list)
 
# 使用迭代器创建 ndarray 
x=np.fromiter(it, dtype=float)   
x

 输出结果:array([0., 1., 2., 3., 4.])

(14)linspace

例子:

打开jupyter

a = np.linspace(1,10,10)
a

 输出结果:array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])

a = np.linspace(10, 20,  5, endpoint =  False)  
a

将 endpoint 设为 false,不包含终止值:反之,则包含

输出结果:array([10., 12., 14., 16., 18.])

(15)logspace

例子:

打开jupyter

# 默认底数是 10
a = np.logspace(1.0,  2.0, num =  10) 
a

 输出结果:array([ 10. , 12.91549665, 16.68100537, 21.5443469 , 27.82559402, 35.93813664, 46.41588834, 59.94842503, 77.42636827, 100. ])

#将对数的底数设置为 2
a = np.logspace(0,9,10,base=2)
a

输出结果:array([ 1., 2., 4., 8., 16., 32., 64., 128., 256., 512.])

        5.array本身支持的大量操作和函数

A = np.arange(10).reshape(2,5)
A
A+1
A*3
np.sin(A)
np.exp(A)

A矩阵中每个对应值都+1,-1,sin值,以e为底的指数值

把一个向量改成2x5的矩阵

输出结果:array([[0, 1, 2, 3, 4],

                            [5, 6, 7, 8, 9]])

                  array([[ 1, 2, 3, 4, 5],

                            [ 6, 7, 8, 9, 10]])

                  array([[ 0, 3, 6, 9, 12],

                            [15, 18, 21, 24, 27]])

                  array([[ 0. , 0.84147098, 0.90929743, 0.14112001, -0.7568025 ],

                            [-0.95892427, -0.2794155 , 0.6569866 , 0.98935825, 0.41211849]])

                 array([[1.00000000e+00, 2.71828183e+00, 7.38905610e+00, 2.00855369e+01, 5.45981500e+01],

                           [1.48413159e+02, 4.03428793e+02, 1.09663316e+03, 2.98095799e+03, 8.10308393e+03]])

B = np.random.randn(2,5)
B
A+B 
A-B

A和B矩阵中每个对应值相加减

输出结果:array([[ 0.39961078, -0.2358424 , 0.22736848, -0.22654917, 0.02110567],

                            [ 1.20000351, -0.18548543, -1.33659976, 1.48071382, -1.73020108]])

                 array([[0.39961078, 0.7641576 , 2.22736848, 2.77345083, 4.02110567],

                           [6.20000351, 5.81451457, 5.66340024, 9.48071382, 7.26979892]])

                 array([[-0.39961078, 1.2358424 , 1.77263152, 3.22654917, 3.97889433],

                           [ 3.79999649, 6.18548543, 8.33659976, 6.51928618, 10.73020108]])