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. Eclipse设置working set管理项目

    由于项目太多,看起来复杂,不容易找到,所以想要按文件夹区分,所以用到workingset. working set是把你这个存储空间的项目在eclipse中进行分类,只是在视图基础上分类,项目还是只有 ...

  2. vue.js数组追加合并与对象追加合并的

    今天在做懒加载的时候遇到的问题,在网上搜索找到的答案不是很清晰,就来写一下,方便以后使用. 直接上图吧 官方连接:https://cn.vuejs.org/v2/guide/reactivity.ht ...

  3. MySQL->索引的维护[20180504]

    学习MySQL数据库中表的索引维护(新增和删除)       索引的好处:             提高查询的效率             可限定特定的资料(如唯一)     索引的不足:       ...

  4. centos7添加新网卡实现双IP双网关

     问题背景: 业务需要,针对业务需要不同地域的机构访问,所以需要在同一台机器上配置不同IP并配置不同网关,实现不用机构可以访问同一台服务器办理业务. 系统环境: centos linux7 网络环境: ...

  5. php设置文件类型content-type

    在PHP中可以通过header函数来发送头信息,还可以设置文件的content-type,下面整理了一些常见文件类型对于的content-type值. //date 2015-06-22//定义编码h ...

  6. 大数据学习--day13(字符串String--源码分析--JVM内存分析)

    字符串String--源码分析--JVM内存分析 String 类的对象 , 是不可变的字符串对象呢 这个不可变很重要,之后要讲的intern()也离不开它的不可变性. https://www.cnb ...

  7. 关于flume的filechannel的 full 问题

    事务启动以后,批量向事务Transaction的一个putList的尾部写入,putlist是一个LinkedBlockingDeque . 事务提交的时候, 把putlist中的event批量移除, ...

  8. 002---rest_framework认证组件

    rest_framework认证组件 问题:有些API,需要用户登录才能访问,有些无需登录就能访问. 解决: a. 创建两个模型类:UserInfo---OneToOne---UsetToken b. ...

  9. 在Ubuntu上开启MongoDB的IP Security

    本文翻译之MongoDB官网博客,原地址:https://www.mongodb.com/blog/post/enabling-ip-security-for-mongodb-36-on-ubuntu ...

  10. openssl windows 下 编译 bat

    ++++全部++++++++ @echo offrem set sslpath=C:\0openssl\rem echo %sslpath% set X86_lib=C:\0openssl\32\li ...