Numpy

NumPy是一个功能强大的Python库,主要用于对多维数组执行计算。Numpy许多底层函数实际上是用C编写的,因此它的矩阵向量计算速度是原生Python中无法比拟的。

numpy属性

维度(ndim)

# 创建二维数组
array = np.array([
    [1,2,3],
    [4,5,6],
    [7,8,9]
])
print(array.ndim)
# 2

形状(shape)

print(array.shape)
# (3,3)

大小(size)

print(array.size)
# 9

数据类型(dtype)

print(array.dtype)
# int32

创建array

a = np.array([1,2,3],dtype=np.float) # 创建一维数组,dtype指定元素类型
print(a.dtype)
# float64

d = np.array([  # 创建二维数组
    [2,3,4],
    [4,5,6],
    [6,7,8]
])
print(d)
#[[2 3 4]
# [4 5 6]
# [6 7 8]]

生成array

zero = np.zeros((2,3)) # 生成2行3列全为0的矩阵
print(zero)
#[[0. 0. 0.]
# [0. 0. 0.]]

one = np.ones((3,4)) # 生成3行4列全为1的矩阵
print(one)
#[[1. 1. 1. 1.]
# [1. 1. 1. 1.]
# [1. 1. 1. 1.]]

empty = np.empty((3,2)) # 生成3行2列全都接近于0(不等于0)的矩阵
print(empty)
#[[0. 0.]
# [0. 0.]
# [0. 0.]]

e = np.arange(10)
print(e)
# [0 1 2 3 4 5 6 7 8 9]

f = np.arange(4,12)
print(f)
# [ 4  5  6  7  8  9 10 11]

g = np.arange(1,20,3) # 步距3
print(g)
# [ 1  4  7 10 13 16 19]

h = np.arange(8).reshape(2,4) # 重新定义矩阵的形状
print(h)
#[[0 1 2 3]
# [4 5 6 7]]

arr3 = arr1 > 3 # 将判断结果存入arr3
print(arr3)
#[[False False False]
# [ True  True  True]]

print(arr1.T) # 矩阵转置
print(np.transpose(arr1)) # 矩阵转置

矩阵运算

以下运算都是两矩阵形状一致才能进行,因为都是对应位置上的元素逐一运算。

加法运算

arr1 = np.array([
    [1,2,3],
    [4,5,6]
])

arr2 = np.array([
    [1,1,2],
    [2,3,4]
])

print(arr1 + arr2)
#[[ 2  3  5]
# [ 6  8 10]]

减法运算

print(arr1 - arr2)
#[[0 1 1]
# [2 2 2]]

乘法运算

print(arr1 * arr2)
#[[ 1  2  6]
# [ 8 15 24]]

# 两矩阵相乘
np.dot(arr1,arr2)
arr1.dot(arr2)

除法运算

print(arr1 / arr2)
#[[1.         2.         1.5       ]
# [2.         1.66666667 1.5       ]]

幂运算

print(arr1 ** arr2)
#[[   1    2    9]
# [  16  125 1296]]

取余运算

print(arr1 % arr2)
#[[0 0 1]
# [0 2 2]]

取整运算

print(arr1 // arr2)
#[[1 2 1]
# [2 1 1]]

随机数生成及矩阵运算

sample1 = np.random.random((3,2)) # 生成3行2列从0到1的随机数
print(sample1)
# [[0.23880087 0.36963104]
#  [0.12920673 0.19140641]
#  [0.29037101 0.41021395]]

sample2 = np.random.normal(loc=0,scale=1,size=(3,2)) # 生成3行2列符合标准正态分布的随机数
print(sample2)
#[[ 0.12024487 -0.71771871]
# [ 1.18751981  0.55059626]
# [-0.36288479  0.48795296]]

sample3 = np.random.randint(0,10,size=(3,2)) # 生成3行2列从0到10的随机整数
print(sample3)
#[[9 8]
# [4 2]
# [8 9]]

np.sum(sample3) # 矩阵所有元素求和
np.sum(sample3,axis=0) # axis=0表示对列求和
np.sum(sample3,axis=1) # axis=1表示对行求和
# 40
# array([21, 19])
# array([17,  6, 17])

np.min(sample3) # 矩阵元素最小值
np.argmin(sample3) # 求最小值的索引
# 2
# 3

np.max(sample3) # 矩阵元素最大值
np.argmax(sample3) # 求最大值的索引
# 9
# 0

np.mean(sample3) # 求平均值
# 6.666666666666667

np.median(sample3) # 取中位数
# 8.0

np.sqrt(sample3) # 元素逐一开方
# array([[3.        , 2.82842712],
#       [2.        , 1.41421356],
#       [2.82842712, 3.        ]])

排序

sample4 = np.random.randint(0,10,size=(1,10))
print(sample4)
# [[0 9 4 4 1 1 4 3 2 9]]

print(np.sort(sample4)) # 对数组排序
# [[0 1 1 2 3 4 4 4 9 9]]

sample3 = [
    [9 8],
    [4 2],
    [8 9]
]
print(np.sort(sample3,axis=0)) # 列排序
print(np.sort(sample3,axis=1)) # 行排序
print(np.sort(sample3,axis=None)) # axis=None,先进行扁平化处理,再排序
#[[4 2]
# [8 8]
# [9 9]]
#[[8 9]
# [2 4]
# [8 9]]
#[2 4 8 8 9 9]

限定矩阵元素范围

np.clip(sample3,a_min=3,a_max=6) # 限定sample中的元素范围,小于a_min的变为a_min,大于a_mxa的变为a_max
#array([[6, 6],
#       [4, 3],
#       [6, 6]])

numpy索引

arr1 = np.arange(2,14)
print(arr1)
# [ 2  3  4  5  6  7  8  9 10 11 12 13]

print(arr1[2]) # 索引从0开始
# 4

print(arr1[1:4]) # 切片,索引从1开始到4(不含4)
# [3 4 5]

print(arr1[2:-1]) # 索引从2到倒数第1个位置(不含倒数第1)
# [ 4  5  6  7  8  9 10 11 12]

print(arr1[:5]) # 从开始取到索引5(不含5)
# [2 3 4 5 6]

print(arr1[-2:]) # 索引倒数第2到最后
# [12 13]

arr2 = arr1.reshape(3,4)
print(arr2)
#[[ 2  3  4  5]
# [ 6  7  8  9]
# [10 11 12 13]]

print(arr2[1])
print(arr2[1][2])
print(arr2[1,2]) # 等价于arr2[1][2]
#[6 7 8 9]
#8
#8

print(arr2[:,2]) # 取所有行第2列
# [ 4  8 12]

for i in arr2: # 迭代行
    print(i)
# [2 3 4 5]
# [6 7 8 9]
# [10 11 12 13]

for i in arr2.T: # 迭代列
    print(i)
# [ 2  6 10]
# [ 3  7 11]
# [ 4  8 12]
# [ 5  9 13]

for i in arr2.flat: # 扁平化
    print(i)
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9
# 10
# 11
# 12
# 13

array的合并

arr1 = np.array([1,2,3])
arr2 = np.array([4,5,6])
arr3 = np.vstack((arr1,arr2)) # 垂直合并
print(arr3,arr3.shape)
# [[1 2 3]
#  [4 5 6]] (2, 3)

arr4 = np.hstack((arr1,arr2)) # 水平合并
print(arr4,arr4.shape)
# [1 2 3 4 5 6] (6,)

arrv = np.vstack((arr1,arr2,arr3)) # 多个矩阵合并
print(arrv,arrv.shape)
# [[1 2 3]
#  [4 5 6]
#  [1 2 3]
#  [4 5 6]] (4, 3)

concatenate矩阵合并

concatenate必须同维数组才能合并。

arr5 = np.concatenate((arr3,[arr1]),axis=0) # concatenate必须同维数组才能合并,arr1是一维,只能加个[]转为二维才能合并
print(arr5) # axis = 0 垂直合并
# [[1 2 3]
#  [4 5 6]
#  [1 2 3]]

arr6 = np.concatenate((arr3,[[1],[2]]),axis=1) #水平合并
print(arr6) # axis = 1 水平合并
# [[1 2 3 1]
#  [4 5 6 2]]

arr10 = np.atleast_2d(arr1) # 将矩阵变为至少二维矩阵,大于2不生效
print(arr10)
# [[1 2 3]]

array分割

arr1 = np.arange(12).reshape((3,4))
print(arr1)
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]

arr2,arr3 = np.split(arr1,2,axis=1) # 水平方向分割,分成2分
print(arr2)
print(arr3)
#[[0 1]
# [4 5]
# [8 9]]
#[[ 2  3]
# [ 6  7]
# [10 11]]

arr4,arr5,arr6 = np.split(arr1,3,axis=0) # 垂直方向分割,分成2分
print(arr4)
print(arr5)
print(arr6)
# [[0 1 2 3]]
# [[4 5 6 7]]
# [[ 8  9 10 11]]

array拷贝

arr1 = np.array([1,2,3])

# 浅拷贝
arr2 = arr1 # 不同指针,指向同一块内存,浅拷贝
arr2[0] = 5
print(arr1)
print(arr2)
# [5 2 3]
# [5 2 3]

# 深拷贝
arr3 = arr1.copy() # 深拷贝,重新开辟内存空间
arr3[0] = 10
print(arr1)
print(arr3)
# [5 2 3]
# [10  2  3]

Python科学计算库灬numpy的更多相关文章

  1. python科学计算库的numpy基础知识,完美抽象多维数组(原创)

    #导入科学计算库 #起别名避免重名 import numpy as np #小技巧:从外往内看==从左往右看 从内往外看==从右往左看 #打印版本号 print(np.version.version) ...

  2. Python科学计算库

    Python科学计算库 一.numpy库和matplotlib库的学习 (1)numpy库介绍:科学计算包,支持N维数组运算.处理大型矩阵.成熟的广播函数库.矢量运算.线性代数.傅里叶变换.随机数生成 ...

  3. Python科学计算库Numpy

    Python科学计算库Numpy NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库. 1.简 ...

  4. python科学计算库numpy和绘图库PIL的结合,素描图片(原创)

    # 导入绘图库 from PIL import Image #导入科学计算库 import numpy as np #封装一个图像处理工具类 class TestNumpy(object): def ...

  5. windows下安装python科学计算环境,numpy scipy scikit ,matplotlib等

    安装matplotlib: pip install matplotlib 背景: 目的:要用Python下的DBSCAN聚类算法. scikit-learn 是一个基于SciPy和Numpy的开源机器 ...

  6. Python科学计算基础包-Numpy

    一.Numpy概念 Numpy(Numerical Python的简称)是Python科学计算的基础包.它提供了以下功能: 快速高效的多维数组对象ndarray. 用于对数组执行元素级计算以及直接对数 ...

  7. python科学计算库-pandas

    ------------恢复内容开始------------ 1.基本概念 在数据分析工作中,Pandas 的使用频率是很高的, 一方面是因为 Pandas 提供的基础数据结构 DataFrame 与 ...

  8. [Python学习] python 科学计算库NumPy—矩阵运算

    NumPy库的核心是矩阵及其运算. 使用array()函数可以将python的array_like数据转变成数组形式,使用matrix()函数转变成矩阵形式. 基于习惯,在实际使用中较常用array而 ...

  9. Python科学计算库-Numpy

    NumPy 是 Python 语言的一个扩充程序库.支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库,也是学习 python 必学的一个库. 1. 读取文件 numpy.gen ...

随机推荐

  1. EF Core 2.1 Raw SQL Queries (转自MSDN)

    Entity Framework Core allows you to drop down to raw SQL queries when working with a relational data ...

  2. 解决Js跨域访问的问题

    1,最近有个需求,用Js获取Html标签<input type="file"/>的路径!遇到代码拒绝访问,提示安全验证,不允许跨域访问,简单的设置一下浏览器即可,不过对 ...

  3. 【HTML5-基础-SVG实践】

    关于svg HTML页面常用加载svg图片方式: HTML元素 // data 和 type 至少指定一项 <object data = './public/icon.svg' width='2 ...

  4. java SSM 框架 多数据源 代码生成器 websocket即时通讯 shiro redis 后台框架源码

    A 调用摄像头拍照,自定义裁剪编辑头像 [新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统]B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,开发利器)+快速构建表单;  技 ...

  5. OpenID Connect Core 1.0(五)使用授权码流验证(下)

    3.1.2.6 验证错误响应(Authentication Error Response) 验证错误响应是一个OAuth 2.0授权错误响应消息,是RP发送授权请求的消息,由OP授权终结点的响应返回. ...

  6. mysql事件关闭解决办法

    Mysql 事件event_scheduler是OFF 开启 Event Scheduler,以下4种方式等效 SET GLOBAL event_scheduler = ON; SET @@globa ...

  7. 基于Centos7系统部署cobbler批量安装系统

    前言 cobbler是一个可以实现批量安装系统的Linux应用程序.它有别于pxe+kickstart,cobbler可以实现同个服务器批量安装不同操作系统版本 系统环境的准备及下载cobbler 一 ...

  8. ElasticSearch优化系列三:机器设置(内存)

    heap参数设置优化 命令行修改 ./bin/elasticsearch -Xmx10g -Xms10g xmx-JVM最大允许分配的堆内存,按需分配 xms-JVM初始分配的堆内存 此值设置与-Xm ...

  9. 使用CURL实现GET和POST方式请求

    /** 使用curl方式实现get或post请求@param $url 请求的url地址@param $data 发送的post数据 如果为空则为get方式请求return 请求后获取到的数据 */f ...

  10. MySQL数据库实验:任务一 创建数据库和表

    目录 任务一 创建数据库和表 [实训目的与要求] [实训原理] [实训步骤] 一.熟悉MySQL环境 二.利用MySQL命令行窗口创建数据库及表 三.利用界面工具创建数据库及表 任务一 创建数据库和表 ...