numpy学习笔记.
import numpy as np
import cv2
import matplotlib.pyplot as plt
一、数组的创建
1. 创建二维数组
np.array([
[1,2,3],
[4,6,8],
])
array([[1, 2, 3],
[4, 6, 8]])
*数组宽度需要一致
np.array([
[1,2,3],
[4,6,8,7],
])
array([list([1, 2, 3]), list([4, 6, 8, 7])], dtype=object)
2. 和python类似的range()函数
np.arange(2, 6, 0.5)
array([2. , 2.5, 3. , 3.5, 4. , 4.5, 5. , 5.5])
3. 创建元素全部为 1/0/随意/指定 的数组(ones、zeros、empty、full)
np.ones(shape=(5,3))
array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
np.ones_like(np.array([[1,2],[7,8]]))
array([[1, 1],
[1, 1]])
创建不初始化的数组
np.empty(shape=(3,2,2))
array([[[0., 0.],
[0., 0.]],
[[0., 0.],
[0., 0.]],
[[0., 0.],
[0., 0.]]])
创建数组,指定形状和填充值
np.full((3,4), 5)
array([[5, 5, 5, 5],
[5, 5, 5, 5],
[5, 5, 5, 5]])
单位矩阵
np.eye(5)
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.]])
等差数列
np.linspace(0, 20, num=11, endpoint=True)
array([ 0., 2., 4., 6., 8., 10., 12., 14., 16., 18., 20.])
等比数列
np.logspace(1, 10, num=10, base=2)
array([ 2., 4., 8., 16., 32., 64., 128., 256., 512.,
1024.])
1. range和linspace都可以产生等差数列;
2. arange指定的是步长,linspace和logspace指定的是区间内数值的个数。
二、数组和列表
array采用紧凑形式存储,即直接存储数据,而不是像列表一样存储地址
1. 创建数组和列表,进行时间和空间衡量
三、 数组运算
支持矢量运算(广播运算,内存对齐)
a = np.array([1,2,3])
b = np.array([
[7,2,6],
[6,5,4]
])
c = 3
广播运算,对于形状不同的数组,进行扩展
a+b+c
array([[11, 7, 12],
[10, 10, 10]])
d = np.array([[1],[2],[3]])
d+a
array([[2, 3, 4],
[3, 4, 5],
[4, 5, 6]])
并不是所有情况都可以广播运算,有的时候,广播也不能够形式相同
np.array([1,2])+a
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-1-d106fb5a0ffe> in <module>()
----> 1 np.array([1,2])+a
NameError: name 'np' is not defined
四、数据类型
1. 指定数据类型
np.array([1, 2.3, 2], dtype=np.float32)
array([1. , 2.3, 2. ], dtype=float32)
2. 更改数据类型
a = np.array([1, 2.3, 2], dtype=np.float32)
a.astype(np.int32)
array([1, 2, 2], dtype=int32)
a.dtype=np.int32
a
array([1065353216, 1075000115, 1073741824], dtype=int32)
a = np.arange(24)
a.reshape((3,8))
array([[ 0, 1, 2, 3, 4, 5, 6, 7],
[ 8, 9, 10, 11, 12, 13, 14, 15],
[16, 17, 18, 19, 20, 21, 22, 23]])
np.reshape(a, (3, -1))
array([[ 0, 1, 2, 3, 4, 5, 6, 7],
[ 8, 9, 10, 11, 12, 13, 14, 15],
[16, 17, 18, 19, 20, 21, 22, 23]])
五、 索引和切片
5.1 reshape可以实现维数的改变
a = np.arange(12)
b=a.reshape((3,4))
b
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
5.2 切片,返回原数组对象的视图,共享底层数据
b[1:, 1:3]
array([[ 5, 6],
[ 9, 10]])
切片,返回视图,如果改变底层数据,另外一个也会发生影响
c = b[:]
c[0, 0] = 777
b
array([[777, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
如果需要深拷贝,可以使用copy()
c = b.copy()
c[0, 0] = 888
b
array([[777, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
5.3 数组索引
传入整形索引列表,返回的是新拷贝对象
index = [5, 8, 2, 7]
a[index]
array([5, 8, 2, 7])
创建一个bool数组,可以根据布尔数组选择元素
age = np.array([15, 135, 56, 15, 65, 123, 156, 96, 61, 166, 41, 20])
a[age>50]
array([1, 2, 4, 5, 6, 7, 8, 9])
*布尔数组元素个数必须和目标数组数量一致
age1 = np.array([14, 135, 56, 35, 63, 123, 152, 96, 61, 162, 42, 20])
age1 == age
array([False, True, True, False, False, True, False, True, True,
False, False, True])
a[age1 == age]
array([ 1, 2, 5, 7, 8, 11])
a[(age1 == age) & (age>50)]
array([1, 2, 5, 7, 8])
六、 数据扁平化
ravel是浅拷贝, flatten是深拷贝
a = np.arange(10).reshape(2,5)
b = a.flatten()
b[0] = 777
a
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
c = a.ravel()
c[0] = 777
a
array([[777, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9]])
reshape会把原数组扁平化后,再进行结构化
a = np.arange(24)
a.reshape((6,4), order='c')
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]])
a.reshape((6,4), order='f')
array([[ 0, 6, 12, 18],
[ 1, 7, 13, 19],
[ 2, 8, 14, 20],
[ 3, 9, 15, 21],
[ 4, 10, 16, 22],
[ 5, 11, 17, 23]])
七、 统计函数
- mean/sum
- max/min
- argmax/argmin
- std/ver
- consum/conprod
a = np.array([
[1,2,3],
[8,6,1],
[0,4,15],
[8,52,32]
])
a.shape
(4, 3)
很重要的一个概念:轴
a.sum(axis=0)
array([17, 64, 51])
a.sum(axis=1)
array([ 6, 15, 19, 92])
当维度扩展到多维时,统计规则:
按照指定轴下标索引的方向统计
x = np.arange(24).reshape(2,3,4)
x.shape
(2, 3, 4)
x.sum(axis=0)
array([[12, 14, 16, 18],
[20, 22, 24, 26],
[28, 30, 32, 34]])
x.mean(axis=1)
array([[ 4., 5., 6., 7.],
[16., 17., 18., 19.]])
八、随机函数
1. 随机数
np.random.rand() // 产生的区间为[0,1)
0.5876140647572566
np.random.rand(2,3,4)
array([[[0.39923779, 0.54564034, 0.29082511, 0.55575218],
[0.9706234 , 0.46321137, 0.53333865, 0.45499656],
[0.59093915, 0.71118072, 0.20639271, 0.63456103]],
[[0.43380432, 0.67861236, 0.90540132, 0.41274326],
[0.33723336, 0.64989966, 0.54551242, 0.50927546],
[0.42052748, 0.88828045, 0.63187932, 0.88410905]]])
2. 标准正态分布
np.random.rand(3,3)
array([[0.4789705 , 0.06642018, 0.23518938],
[0.38329877, 0.43547922, 0.28622591],
[0.91541056, 0.04645713, 0.52973722]])
3. 指定标准差和均值的正态分布
np.random.normal(size=(2,3), loc=5, scale=5)
array([[ 6.65254795, 4.86225972, 5.30554417],
[ 7.78982908, 9.07412392, 16.97508793]])
4. 随机整数
np.random.seed(1)
np.random.randint(5, 15, size=(8,8))
array([[10, 13, 14, 10, 5, 5, 6, 12],
[11, 14, 7, 9, 10, 7, 9, 7],
[ 9, 12, 12, 14, 6, 12, 5, 11],
[14, 14, 12, 11, 14, 6, 5, 6],
[13, 13, 8, 14, 13, 12, 8, 11],
[10, 6, 14, 8, 9, 13, 6, 9],
[ 5, 8, 14, 7, 5, 9, 14, 7],
[12, 12, 14, 13, 11, 14, 8, 12]])
np.random.seed(1) // 设定相同的种子
np.random.randint(5, 15, size=(8,8))
array([[10, 13, 14, 10, 5, 5, 6, 12],
[11, 14, 7, 9, 10, 7, 9, 7],
[ 9, 12, 12, 14, 6, 12, 5, 11],
[14, 14, 12, 11, 14, 6, 5, 6],
[13, 13, 8, 14, 13, 12, 8, 11],
[10, 6, 14, 8, 9, 13, 6, 9],
[ 5, 8, 14, 7, 5, 9, 14, 7],
[12, 12, 14, 13, 11, 14, 8, 12]])
import random
a = random.randrange(5, 15)
b = random.randint(5, 15)
a,b
(13, 9)
5. 洗牌
a = np.arange(10)
np.random.shuffle(a)
a
array([0, 7, 1, 3, 8, 2, 9, 5, 4, 6])
6. 产生随机小数[a, b)
np.random.uniform(2.1, 5.2)
2.816147808859026
九、 连接和拆分
a = np.arange(12).reshape(3,2,2)
b = np.arange(12, 24).reshape(3,2,2)
c = np.concatenate((a,b), axis=2)
c
array([[[ 0, 1, 12, 13],
[ 2, 3, 14, 15]],
[[ 4, 5, 16, 17],
[ 6, 7, 18, 19]],
[[ 8, 9, 20, 21],
[10, 11, 22, 23]]])
np.split(c, 2, axis=2) // 切割数量必须能整除,
[array([[[ 0, 1],
[ 2, 3]],
[[ 4, 5],
[ 6, 7]],
[[ 8, 9],
[10, 11]]]), array([[[12, 13],
[14, 15]],
[[16, 17],
[18, 19]],
[[20, 21],
[22, 23]]])]
np.split(c, [3,], axis=2) // 还可以通过列表指定拆分位置,效果如[0-2][3-最后]
[array([[[ 0, 1, 12],
[ 2, 3, 14]],
[[ 4, 5, 16],
[ 6, 7, 18]],
[[ 8, 9, 20],
[10, 11, 22]]]), array([[[13],
[15]],
[[17],
[19]],
[[21],
[23]]])]
十、其它函数
a = np.arange(24).reshape(6,4)
a.any()
True
a.all()
False
转置(颠倒下标)
a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]])
a.T
array([[ 0, 4, 8, 12, 16, 20],
[ 1, 5, 9, 13, 17, 21],
[ 2, 6, 10, 14, 18, 22],
[ 3, 7, 11, 15, 19, 23]])
轴变换
a = np.arange(24).reshape(2,3,4)
a.transpose(2,0,1)
array([[[ 0, 4, 8],
[12, 16, 20]],
[[ 1, 5, 9],
[13, 17, 21]],
[[ 2, 6, 10],
[14, 18, 22]],
[[ 3, 7, 11],
[15, 19, 23]]])
十一、 运算
1. 乘法
a = np.arange(24).reshape(6,4)
b = np.arange(24).reshape(4,6)
c = 5
d = np.arange(4).T
np.dot(a,c)
array([[ 0, 5, 10, 15],
[ 20, 25, 30, 35],
[ 40, 45, 50, 55],
[ 60, 65, 70, 75],
[ 80, 85, 90, 95],
[100, 105, 110, 115]])
点积(dot 和 @)
np.dot(a, b)
array([[ 84, 90, 96, 102, 108, 114],
[ 228, 250, 272, 294, 316, 338],
[ 372, 410, 448, 486, 524, 562],
[ 516, 570, 624, 678, 732, 786],
[ 660, 730, 800, 870, 940, 1010],
[ 804, 890, 976, 1062, 1148, 1234]])
a@d
array([ 14, 38, 62, 86, 110, 134])
a = np.arange(24).reshape(2,3,4)
b = np.arange(24).reshape(2,4,3)
a@b
array([[[ 42, 48, 54],
[ 114, 136, 158],
[ 186, 224, 262]],
[[ 906, 960, 1014],
[1170, 1240, 1310],
[1434, 1520, 1606]]])
注意:a的最后一维和b的倒数第二维长度相同才能点积
(a@b).shape
(2, 3, 3)
十二、 排序
- np.sort() 返回新对象
- 对象.sort() 就地修改
x = np.array([1,43,5,7,3,43,43])
np.sort(对象)返回新对象
y = np.sort(x)
y
array([ 1, 3, 5, 7, 43, 43, 43])
x
array([ 1, 43, 5, 7, 3, 43, 43])
对象运用排序方法,返回原对象
x.sort()
x
array([ 1, 3, 5, 7, 43, 43, 43])
unique() 去重 & 排序
np.unique(x)
array([ 1, 3, 5, 7, 43])
三目运算
a = np.array([1, 3, 5, 7, 43])
b = np.array([4, 2, 56, 2, 1])
np.where(a>b, a, b)
array([ 4, 3, 56, 7, 43])
i/o操作
a = np.arange(24).reshape(2,3,4)
np.save("./" ,a)
result = np.load("./.npy", )
result
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
练习,读取图像
a = plt.imread('/home/geoffrey/图片/baidu.png')
a.shape
(258, 540, 4)
plt.imshow(a)
plt.show()
result = np.split(a, 3)
img_black = np.full((500, 500),fill_value=255, dtype=np.uint8)
img_black
array([[255, 255, 255, ..., 255, 255, 255],
[255, 255, 255, ..., 255, 255, 255],
[255, 255, 255, ..., 255, 255, 255],
...,
[255, 255, 255, ..., 255, 255, 255],
[255, 255, 255, ..., 255, 255, 255],
[255, 255, 255, ..., 255, 255, 255]], dtype=uint8)
cv2.imshow('', img_black)
cv2.WaitKey(0)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-26-700b93714854> in <module>()
1 cv2.imshow('', img_black)
----> 2 cv2.WaitKey(0)
AttributeError: module 'cv2.cv2' has no attribute 'WaitKey'
plt.imshow(img_black)
<matplotlib.image.AxesImage at 0x7f544658d128>
numpy学习笔记.的更多相关文章
- NumPy学习笔记 三 股票价格
NumPy学习笔记 三 股票价格 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.&l ...
- NumPy学习笔记 二
NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...
- NumPy学习笔记 一
NumPy学习笔记 一 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...
- numpy 学习笔记
numpy 学习笔记 导入 numpy 包 import numpy as np 声明 ndarray 的几种方法 方法一,从list中创建 l = [[1,2,3], [4,5,6], [7,8,9 ...
- Numpy学习笔记(下篇)
目录 Numpy学习笔记(下篇) 一.Numpy数组的合并与分割操作 1.合并操作 2.分割操作 二.Numpy中的矩阵运算 1.Universal Function 2.矩阵运算 3.向量和矩阵运算 ...
- Numpy学习笔记(上篇)
目录 Numpy学习笔记(上篇) 一.Jupyter Notebook的基本使用 二.Jpuyter Notebook的魔法命令 1.%run 2.%timeit & %%timeit 3.% ...
- Python数据分析:Numpy学习笔记
Numpy学习笔记 ndarray多维数组 创建 import numpy as np np.array([1,2,3,4]) np.array([1,2,3,4,],[5,6,7,8]) np.ze ...
- 数据分析之Pandas和Numpy学习笔记(持续更新)<1>
pandas and numpy notebook 最近工作交接,整理电脑资料时看到了之前的基于Jupyter学习数据分析相关模块学习笔记.想着拿出来分享一下,可是Jupyter导出来h ...
- numpy学习笔记Ⅰ
一直被numpy和matplotlib困扰,打算好好学习一下,也是从自己的观点,学对自己帮助最大的部分 主要参考<https: www.runoob.com="" numpy ...
- Python numpy学习笔记(一)
下边代码是关于numpy的一些基本用法,包括数组和矩阵操作等... import numpy as np print "<== print version ==>" p ...
随机推荐
- Confluence 6 Home 和其他重要的目录
Confluence 安装目录 Confluence 安装的目录(Confluence Installation directory)定义的是 Confluence 是在那里进行安装的.这个目录有时候 ...
- Confluence 6 隐藏人员目录
人员目录提供了你 Confluence 中所有用户的列表. 如果你希望禁用人员目录,请在你应用程序命令行中的 Configuring System Properties 进行设置. 希望为匿名用户禁用 ...
- LeetCode(125):验证回文串
Easy! 题目描述: 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, ...
- jQuery常见的几个文档处理方式
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- Jmeter3.0 中文乱码的解决方法
在Body Data中输入中文时,发现是乱码,如下图 这种情况在jmeter3.0的版本中才会产生,由于3.0中优化body data后,使用默认的字体(Consolas)不支持汉字的显示. 解决方法 ...
- FCN 项目部分代码学习
下面代码由搭档注释,保存下来用作参考. github项目地址:https://github.com/shekkizh/FCN.tensorflowfrom __future__ import prin ...
- Java接口自动化测试之TestNG测试报告ExtentReports的应用(三)
pom.xml导入包 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...
- 20165328 学习基础和C语言基础调查
一.技能学习经验: 1.你有什么技能比大多数人(超过90%以上)更好: 我算是一个普通人,没什么特别的才能,如果硬要说有什么技能比其他人较好的话,我想大概是快速阅读的能力吧,我能以很快的速度 ...
- python 在WINDOS虚拟环境部署
#查看电脑的版本 C:\Users\lys>pip -V pip 8.1.1 from e:\python\python3.5\lib\site-packages (python 3.5) #安 ...
- python练习册0006
第 0006 题:你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都是英文,请统计出你认为每篇日记最重要的词. import re import os def get_li ...