前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Numpy的总结

Numpy的总结

作者头像
润森
发布2019-08-29 10:26:14
7790
发布2019-08-29 10:26:14
举报
文章被收录于专栏:毛利学Python毛利学Python

NumPy(Numerical Python)是 Python 中的一个线性代数库。对每一个数据科学或机器学习 Python 包而言,这都是一个非常重要的库,SciPy(Scientific Python)、Mat-plotlib(plotting library)、Scikit-learn 等都在一定程度上依赖 NumPy。

对数组执行数学运算和逻辑运算时,NumPy 是非常有用的。在用 Python 对 n 维数组和矩阵进行运算时,NumPy 提供了大量有用特征。

这篇教程介绍了数据科学初学者需要了解的 NumPy 基础知识,包括如何创建 NumPy 数组、如何使用 NumPy 中的广播机制、如何获取值以及如何操作数组。更重要的是,大家可以通过本文了解到 NumPy 在 Python 列表中的优势:更简洁、更快速地读写项、更方便、更高效。

导入numpy

代码语言:javascript
复制
import numpy as np

数组的新建(arange 和 array)

代码语言:javascript
复制
a = np.array([1,2,3])  # 创建数组,传入的是列表参数
b = np.arange(0, 10, 1) # 相当于python 的range

linspace 和logspace 用法

代码语言:javascript
复制
a = np.linspace(0,10,10#个数)   #0到9
b = np.logsoace(0,10,10  #可以用base=2改变底数)  # 10^0 和 10^10

shape 和 reshape

  • 注意reshape(1,-1)和reshape(-1,1)的区别
代码语言:javascript
复制
a = np.array([[1,2,3],[4,5,6]])
a.reshape(1,-1)
a.reshape(-1,1)
a
代码语言:javascript
复制
array([[1, 2, 3, 4, 5, 6]])
array([[1],
       [2],
       [3],
       [4],
       [5],
       [6]])
array([[1, 2, 3],
       [4, 5, 6]])

数据的切片和选取

数组的布尔值的运用

  • ~ 反
  • & 并
  • | 或

数组的连接 (concatenate的用法)

轴的概念

axis=1实际上是说,只对行进行操作 axis=1实际上是说,只对列进行操作

  • axis = 0 可以简写成 0

求唯一值

代码语言:javascript
复制
a = np.array([1,2,1,1,1,3,4,3,5,2,3])
np.unique(a) # array([1, 2, 3, 4, 5])

生成随机数

代码语言:javascript
复制
np.random.rand(3,4)  # rand函数根据给定维度生成[0,1)之间的数据,包含0,不包含1
np.random.randn(3,4) # randn函数返回均值=0,标准差=1,具有标准正态分布。
np.random.normal(5,1,size=(3, 4)) #normal函数是正态分布,但可以修改均值和标准差,第一个是均值,第二个是标准差,还可以传入size
np.random.randint(1, 10, 10) #返回随机整数,范围区间为[low,high),包含low,不包含high
np.random.choice(3,3) #从给定的0到3中生成3个随机数,还可以传入size为数组维度
代码语言:javascript
复制
array([[0.38791074, 0.66974604, 0.93553907, 0.84631092],
       [0.31327352, 0.52454816, 0.44345289, 0.22957721],
       [0.53441391, 0.91396202, 0.45720481, 0.43069857]])
array([[ 0.8858294 ,  0.63190187,  0.04026035, -0.90312288],
       [ 0.17532267,  0.19443089, -0.53524902,  0.77735121],
       [ 0.17133845, -0.44285144,  1.70490377,  0.92434585]])
array([[3.69513876, 4.61942496, 4.25637299, 4.56287823],
       [4.57354991, 6.3814073 , 5.09837051, 4.63054252],
       [3.72678005, 6.0149868 , 3.51894029, 4.71290011]])
array([9, 7, 4, 8, 8, 5, 6, 4, 7, 9])
array([0, 2, 2])

固定随机数 seed 的用法

  • 参数相同时使得每次生成的随机数相同;当参数不同或者无参数时,作用与numpy.random.rand()函数相同,即多次生成随机数且每次生成的随机数都不同。
代码语言:javascript
复制
import numpy as np 
for i in range(5):
    np.random.seed(1) # 当这里有数时,生成相同的随机数
    a = np.random.randint(1,10,10)
    print(a)
代码语言:javascript
复制
[6 9 6 1 1 2 8 7 3 5]
[6 9 6 1 1 2 8 7 3 5]
[6 9 6 1 1 2 8 7 3 5]
[6 9 6 1 1 2 8 7 3 5]
[6 9 6 1 1 2 8 7 3 5]

数组和矩阵的区别

矩阵matrix和数组array是NumPy里的两种数据类型。matrix是array的分支,matrix和array在很多时候都是通用的,你用哪一个都一样。Numpy matrices必须是2维的,但是 numpy arrays (ndarrays) 可以是多维的

创建方法 矩阵是mat 或matrix ,数组是array和arange

代码语言:javascript
复制
![import numpy as np
np.matrix(np.eye(4))
np.array(np.eye(4)]

数组和矩阵使用方法的区别

matrix.T transpose:返回矩阵的转置矩阵 (数组都有) 这是只有矩阵才有的 matrix.H hermitian (conjugate) transpose:返回复数矩阵的共轭元素矩阵 matrix.I inverse:返回矩阵的逆矩阵 matrix.A base array:返回矩阵基于的数组

矩阵的换行必须是用分号(;)隔开,内部数据必须为字符串形式(‘ ’),矩阵的元素之间必须以空格隔开

代码语言:javascript
复制
a = np.matrix('1 2 7; 3 4 8; 5 6 9')  

例子

代码语言:javascript
复制
a = np.random.randn(3,4)
a.T
a.I
a = np.mat(a)
a.I
代码语言:javascript
复制
array([[ 0.52226072,  1.77935565, -0.76208424],
       [ 1.58157201, -1.18125853,  0.77364867],
       [ 1.19925864,  1.03371571,  1.11650254],
       [-0.31157359,  2.07659653, -0.3801554 ]])   #这是第一个a.T的结果

AttributeError: 'numpy.ndarray' object has no attribute 'I'  #a.I会报错,因为数组没有这个参数

matrix([[ 0.48687424,  0.06555841, -0.68032801],    #a = np.mat(a)将数组变成矩阵,所以这时a.i才有输出
        [ 0.47857106, -0.14676465, -0.23285881],
        [-0.04159389,  0.22476055,  0.63790475],
        [-0.12424659,  0.23001231,  0.13294199]])

连接和分割数组

代码语言:javascript
复制
a = np.arange(6).reshape(2,3)
b = np.arange(6,12) .reshape(2,3)  
a1 = np.concatenate([a,b])       #默认axis=0 相当于vstack
a2 = np.concatenate([a,b],axis=1)       #相当于hstack
代码语言:javascript
复制
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]])

array([[ 0,  1,  2,  6,  7,  8],
       [ 3,  4,  5,  9, 10, 11]]) 
代码语言:javascript
复制
a,b,c,d=np.split(a1,[ 1,2,3 ]  # 就是切片 )  默认axis=0     # 以此类推
a,b,c = np.split(a2,[2,4],axis = 1) 

只打印第一个a

代码语言:javascript
复制
a = array([[0, 1, 2]])

a = array([[0, 1],
       [3, 4]])

重复元素 tile 和repeat

牛逼的take和put

思考题

1.现在我们新建一个数组 a, 如下所示, 请取出其中 元素值大于1000且小于2000 的所有元素 并改为0,其他为1

代码语言:javascript
复制
a = np.arange(0,3000,5)

a[(a>1000)&(a<2000)] = 0 a[~((a>1000)&(a<2000))] = 1

2.使用random.randn创建 10*10 将所有小于0 的值替换为 0, 最后求每一列的均值

代码语言:javascript
复制
a = np.random.rand(10,10)
a[(a<0)] = 0
a.mean(0)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小刘IT教程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导入numpy
  • 数组的新建(arange 和 array)
  • linspace 和logspace 用法
  • shape 和 reshape
  • 数据的切片和选取
  • 数组的布尔值的运用
  • 数组的连接 (concatenate的用法)
  • 轴的概念
  • 求唯一值
  • 生成随机数
  • 固定随机数 seed 的用法
  • 数组和矩阵的区别
  • 创建方法 矩阵是mat 或matrix ,数组是array和arange
  • 数组和矩阵使用方法的区别
  • 矩阵的换行必须是用分号(;)隔开,内部数据必须为字符串形式(‘ ’),矩阵的元素之间必须以空格隔开
    • 连接和分割数组
      • 重复元素 tile 和repeat
        • 牛逼的take和put
          • 思考题
            • 1.现在我们新建一个数组 a, 如下所示, 请取出其中 元素值大于1000且小于2000 的所有元素 并改为0,其他为1
          • 2.使用random.randn创建 10*10 将所有小于0 的值替换为 0, 最后求每一列的均值
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档