numpy基础知识总结
python学习 . 2019/11/29发布 . shanyonggang_web . 我要评论 . 166阅读

NumPy是Python中科学计算的基础包。它是一个Python库,提供多维数组对象,各种派生对象(如掩码数组和矩阵),以及用于数组快速操作的各种API,有包括数学、逻辑、形状操作、排序、选择、输入输出、离散傅立叶变换、基本线性代数,基本统计运算和随机模拟等等,numpy的主要操作是数组。

创建数组

首先是创建数组,有如下几个方法:

import numpy as np
# 创建数组
ndarray = np.array([1,2,3,4])
# 创建数组并定义数据类型
ndarray = np.array([1.3,1.2,1.234,2.444],dtype=float32)
# np.zeros np.zeros_like np.ones np.ones_like np.empty np.empty_like np.eye

数据类型

数据类型主要有整型、浮点型、布尔类型、复数类型等

# int float bool complex
arr.dtype  # 获取数据类型
float_arr = arr.astype(np.float64)   # 转换数据类型

数组运算

主要是数组的加、减、乘、除、开根号等

import numpy as np
ndarray1 = np.array([1,2,4])
ndarray2 = np.array([2,2,3])
arr3 = ndarray1*ndarray2
arr3 = ndarray1+ndarray2
arr3 = ndarray1-ndarray2
arr3 = ndarray1 ** 0.5
arr3 = 1/ndarray1
arr3 = ndarray1>ndarray2
print(arr3)

索引和切片

数组的普通切片索引与python中的列表切片有点类似,不过中间我们可能需要对多维数组进行操作,其中还有布尔索引与花式索引,这块可以自己查阅文档

import numpy as np
# 一维数组
arr = np.array([1,2,3,5,6,7])
# 可以先将原始数组复制保存一份
arr2 = arr.copy()
arr3 = arr[:4]
# 修改arr3数组中的值,原始arr数组也随之变化
arr3[2] = 7878
# 多维数组(注意要将数据均放置在列表中)
arr_many = np.array([[1,2,3,5,6,7],[1,4,7,2,9,10]])
# 取所有值
arr_many1 = arr_many[:]
# 取所有行的前三列
arr_many2 = arr_many[:,:3]
# 取所有列的第一行
arr_many3 = arr_many[:1,:]

数组转置

import numpy as np
arr_many = np.array([[1,2,3,5,6,7],[1,4,7,2,9,10]])
arr_t = arr_many.T
arr = np.dot(arr_many,arr_t)
print(arr_t)
print(arr)

通用函数

import numpy as np
arr_many = np.array([[1,2,3,5,6,7],[1,4,7,2,9,10]])
arr = np.sqrt(arr_many)
# np.maximum(x,y) np.exp() np.abs() np.log() np.sign() 
# np.floor() np.ceil() np.三角函数
print(arr)

数据处理

import numpy as np
points = np.arange(-5, 5, 0.01) # 1000 equally spaced points
xs, ys = np.meshgrid(points, points)
z = np.sqrt(xs ** 2 + ys ** 2)
print(z)
# 将条件逻辑表述为数组运算
a = np.array([[1,-2,3,-1,-6,3],[-1,-9,13,-21,-16,-3]])
b = np.where(a>0,2,-5)
print(b)

统计运算

import numpy as np
points = np.arange(-5, 5, 0.01)
# arr.mean(1)是“计算行的平均值”,arr.sum(0)是“计算每列的和”
z = points.mean()
b = points.sum()
# 累加函数cumsum()
# 累积函数cumprod()
c = points.cumsum(axis=0)
print(z)
print(b)
print(c)

排序

arr = array([ 0.6095, -0.4938,  1.24  , -0.1357,  1.43  , -0.8469])
arr.sort()

线性代数

import numpy as np
# 矩阵乘积
x = np.array([[1., 2., 3.], [4., 5., 6.]])
y = np.array([[6., 23.], [-1, 7], [8, 9]])
z1 = x.dot(y)
z2 = np.dot(x,y)
z3 = x@y
print(z1)
print(z2)
print(z3)
In [231]: from numpy.linalg import inv, qr

In [232]: X = np.random.randn(5, 5)

In [233]: mat = X.T.dot(X)

In [234]: inv(mat)
Out[234]: 
array([[  933.1189,   871.8258, -1417.6902, -1460.4005,  1782.1391],
       [  871.8258,   815.3929, -1325.9965, -1365.9242,  1666.9347],
       [-1417.6902, -1325.9965,  2158.4424,  2222.0191, -2711.6822],
       [-1460.4005, -1365.9242,  2222.0191,  2289.0575, -2793.422 ],
       [ 1782.1391,  1666.9347, -2711.6822, -2793.422 ,  3409.5128]])

In [235]: mat.dot(inv(mat))
Out[235]: 
array([[ 1.,  0., -0., -0., -0.],
       [-0.,  1.,  0.,  0.,  0.],
       [ 0.,  0.,  1.,  0.,  0.],
       [-0.,  0.,  0.,  1., -0.],
       [-0.,  0.,  0.,  0.,  1.]])

In [236]: q, r = qr(mat)

In [237]: r
Out[237]: 
array([[-1.6914,  4.38  ,  0.1757,  0.4075, -0.7838],
       [ 0.    , -2.6436,  0.1939, -3.072 , -1.0702],
       [ 0.    ,  0.    , -0.8138,  1.5414,  0.6155],
       [ 0.    ,  0.    ,  0.    , -2.6445, -2.1669],
       [ 0.    ,  0.    ,  0.    ,  0.    ,  0.0002]])

 


  • 有疑问请在下方评论区留言,我会尽快回复。
  • Email私信我: 511248513@qq.com 或添加博主 微信
本文作者:shanyonggang_web
发布时间:2019年11月29日 13:46
许可协议: 署名-非商业性使用 4.0 国际许可协议
知识共享许可协议     转载请保留原文链接及作者
正在加载今日诗词....
您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击下面的


登录 后回复

当前暂无评论,点击登录来做第一个吃螃蟹的人吧!