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学习笔记.的更多相关文章

  1. NumPy学习笔记 三 股票价格

    NumPy学习笔记 三 股票价格 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.&l ...

  2. NumPy学习笔记 二

    NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...

  3. NumPy学习笔记 一

    NumPy学习笔记 一 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...

  4. numpy 学习笔记

    numpy 学习笔记 导入 numpy 包 import numpy as np 声明 ndarray 的几种方法 方法一,从list中创建 l = [[1,2,3], [4,5,6], [7,8,9 ...

  5. Numpy学习笔记(下篇)

    目录 Numpy学习笔记(下篇) 一.Numpy数组的合并与分割操作 1.合并操作 2.分割操作 二.Numpy中的矩阵运算 1.Universal Function 2.矩阵运算 3.向量和矩阵运算 ...

  6. Numpy学习笔记(上篇)

    目录 Numpy学习笔记(上篇) 一.Jupyter Notebook的基本使用 二.Jpuyter Notebook的魔法命令 1.%run 2.%timeit & %%timeit 3.% ...

  7. 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 ...

  8. 数据分析之Pandas和Numpy学习笔记(持续更新)<1>

    pandas and numpy notebook        最近工作交接,整理电脑资料时看到了之前的基于Jupyter学习数据分析相关模块学习笔记.想着拿出来分享一下,可是Jupyter导出来h ...

  9. numpy学习笔记Ⅰ

    一直被numpy和matplotlib困扰,打算好好学习一下,也是从自己的观点,学对自己帮助最大的部分 主要参考<https: www.runoob.com="" numpy ...

  10. Python numpy学习笔记(一)

    下边代码是关于numpy的一些基本用法,包括数组和矩阵操作等... import numpy as np print "<== print version ==>" p ...

随机推荐

  1. Confluence 6 Home 和其他重要的目录

    Confluence 安装目录 Confluence 安装的目录(Confluence Installation directory)定义的是 Confluence 是在那里进行安装的.这个目录有时候 ...

  2. Confluence 6 隐藏人员目录

    人员目录提供了你 Confluence 中所有用户的列表. 如果你希望禁用人员目录,请在你应用程序命令行中的 Configuring System Properties 进行设置. 希望为匿名用户禁用 ...

  3. LeetCode(125):验证回文串

    Easy! 题目描述: 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, ...

  4. jQuery常见的几个文档处理方式

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  5. Jmeter3.0 中文乱码的解决方法

    在Body Data中输入中文时,发现是乱码,如下图 这种情况在jmeter3.0的版本中才会产生,由于3.0中优化body data后,使用默认的字体(Consolas)不支持汉字的显示. 解决方法 ...

  6. FCN 项目部分代码学习

    下面代码由搭档注释,保存下来用作参考. github项目地址:https://github.com/shekkizh/FCN.tensorflowfrom __future__ import prin ...

  7. Java接口自动化测试之TestNG测试报告ExtentReports的应用(三)

    pom.xml导入包 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...

  8. 20165328 学习基础和C语言基础调查

    一.技能学习经验:      1.你有什么技能比大多数人(超过90%以上)更好: 我算是一个普通人,没什么特别的才能,如果硬要说有什么技能比其他人较好的话,我想大概是快速阅读的能力吧,我能以很快的速度 ...

  9. python 在WINDOS虚拟环境部署

    #查看电脑的版本 C:\Users\lys>pip -V pip 8.1.1 from e:\python\python3.5\lib\site-packages (python 3.5) #安 ...

  10. python练习册0006

    第 0006 题:你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都是英文,请统计出你认为每篇日记最重要的词. import re import os def get_li ...