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. Node 192.168.248.12:7001 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.

    [root@node00 src]# ./redis-trib.rb add-node --slave --master-id4f6424e47a2275d2b7696bfbf8588e8c4c3a5 ...

  2. Beyond Compare 命令行生成目录下所有文件比对的Html网页report

    MAC环境下,使用Beyond Compare命令行生成两个文件夹差异的html,按目录递归生成. #1. 创建compare #2. 创建compare/old #3. compare/new #4 ...

  3. java 网站源码 六套模版 兼容手机平板PC freemaker 静态引擎 在线编辑模版

    官网 http://www.fhadmin.org/ 系统介绍: 1.网站后台采用主流的 SSM 框架 jsp JSTL,网站后台采用freemaker静态化模版引擎生成html 2.因为是生成的ht ...

  4. 关于Oracle的认识

    一.Oracle认识: 1.安装时的全局数据库Orcl可以使用吗?可以的 2.Oracle相关服务: 3.数据库与用户,表空间的关系“ 4.切换数据库 5.关于命令:sqlplus 6\

  5. 搭建Java的运行和开发环境

    Java最大的优势就是跨平台,即编译一次,就能在linux.windows和mac等平台运行,无需再次编译.而典型的C和C++ 则是源代码跨平台,需要根据不同平台的编译规范来进行编译. Java如何跨 ...

  6. mysql截取字段并插入到新的字段中

    例如:在产品表product表中字段content值为["10"],然后在产品表中新建一个字段product_id,提出字段content的值10,如何实现呢? 解: update ...

  7. 简述对Vuex的理解

          1.什么是Vuex:             Vuex是一个专为Vue.js应用程序开发的状态管理模式.     2.使用Vuex的原因:             当我们遇到多个组件共享状 ...

  8. 获取当前目录下所有php文件内的函数名

    $dir = dirname(__FILE__); $files = scandir($dir); foreach($files as $name){ if($name == '.' || $name ...

  9. laravel5.5源码笔记(一、入口应用的初始化)

    laravel的项目入口文件index.php如下 define('LARAVEL_START', microtime(true)); require __DIR__.'/../vendor/auto ...

  10. Delphi跨平台下的GetTickCount,GetCurrentThreadID

    在Windows下只要uses Windows,就有这两个API可调用GetTickCount,GetCurrentThreadID 如果我们需要跨平台使用这两个函数,就不能仅仅Uses Window ...