一直被numpy和matplotlib困扰,打算好好学习一下,也是从自己的观点,学对自己帮助最大的部分

主要参考<https: www.runoob.com="" numpy="" numpy-advanced-indexing.html="">

Numpy

numpy主要用于多维数组和矩阵,与matplotlib结合可以达到替代matlab的效果

三个常用的简单构造

import numpy as np
a = np.eye(4)
b = np.ones(4)
c = np.zeros((4,5))
print("a:\n",a)
print("b:\n",b)
print("c:\n",c) a:
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]]
b:
[1. 1. 1. 1.]
c:
[[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]]

创建时可以指定最小维度(这个从来没用过)

import numpy as np
a = np.array([1, 2, 3, 4, 5], ndmin = 2)
print(a) [[1 2 3 4 5]]

看到这有点懵,打印看一下shape

a.shape

(1, 5)

一般我们用的是3个参数,分别是维数、行数、列数

维数:理解为有几个平面,在CNN中理解为多少张图片

这里的(1,5)理解为1行5列但是维数为2

为理解,这里尝试其他组合,如下:

import numpy as np
a = np.array([1, 2, 3, 4, 5], ndmin = 2)
b = np.array([1,2,3,4,5])
c = np.array([[1],[2],[3],[4],[5]])
d = b.reshape(5,-1)
e = b.reshape(5,)
print("a:",a)
print("a.shape:",a.shape)
print("a.ndim:",a.ndim)
print("b:",b)
print("b.shape:",b.shape)
print("b.ndim:",b.ndim)
print("c:",c)
print("c.shape:",c.shape)
print("c.ndim:",c.ndim)
print("d:",d)
print("d.shape:",d.shape)
print("d.ndim:",d.ndim)
print("e:",e)
print("e.shape:",e.shape)
print("e.ndim:",e.ndim) a: [[1 2 3 4 5]]
a.shape: (1, 5)
a.ndim: 2
b: [1 2 3 4 5]
b.shape: (5,)
b.ndim: 1
c: [[1]
[2]
[3]
[4]
[5]]
c.shape: (5, 1)
c.ndim: 2
d: [[1]
[2]
[3]
[4]
[5]]
d.shape: (5, 1)
d.ndim: 2
e: [1 2 3 4 5]
e.shape: (5,)
e.ndim: 1

这样,对于维数,相对来说就理解比较清楚了

np.dtype比较难理解,简单理解就是结构化数据,详细讲解一个例子:

import numpy as np
student = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')])
a = np.array([('abc', 21, 50),('xyz', 18, 75)], dtype = student)
print(a)
print(a['name'])
print(a['age'])
print(a['marks'])
#print(a.name) [(b'abc', 21, 50.) (b'xyz', 18, 75.)]
[b'abc' b'xyz']
[21 18]
[50. 75.]

先是创建了一个student结构性数据,其中每个数据第一个元素都是name,S是字符串的意思,第二个元素是age,i1是int8,f是浮点

并且这里数量一定要对应上,比如要使用我们创建的student数据,那么每一条数据里面必须是3个元素,对应的name、age和marks

且虽然这里可以用a['name'],但是不可以使用a.name

numpy.arange(start, stop, step, dtype)

arange函数创建范围数组

np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

numpy.linspace 函数用于创建一个一维数组,数组是一个等差数列构成的

numpy的切片

import numpy as np

a = np.array([[1,2,3],[3,4,5],[4,5,6]])
print ("a的第二列:\n",a[...,1]) # 第2列元素
print("a的第二列:\n",a[:,1]) # 第2列元素
print ("a的第二行:\n",a[1,...]) # 第2行元素
print ("a的第二列及后面的列:\n",a[...,1:]) # 第2列及剩下的所有元素 """
a的第二列:
[2 4 5]
a的第二列:
[2 4 5]
a的第二行:
[3 4 5]
a的第二列及后面的列:
[[2 3]
[4 5]
[5 6]]
"""

这里我们常用的一般还是冒号(我个人喜欢用冒号)

numpy的整数高级索引(真的很无聊)

最主要的是一维一维的去对应

import numpy as np 

x = np.array([[1,  2],  [3,  4],  [5,  6]])
y = x[[0,1,2], [0,1,0]]
print (y) [1 4 5]

这里就是(0,0)再(1,1)再(2,0)

花式索引默认按照行进行索引

import numpy as np 

x=np.arange(32).reshape((8,4))
print (x[[4,2,1,7]]) [[16 17 18 19]
[ 8 9 10 11]
[ 4 5 6 7]
[28 29 30 31]]

多个索引(摇了我吧)

import numpy as np 

x=np.arange(32).reshape((8,4))
print (x[np.ix_([1,5,7,2],[0,3,1,2])]) [[ 4 7 5 6]
[20 23 21 22]
[28 31 29 30]
[ 8 11 9 10]]

这里得到了一个这样的矩阵

x[1,0] x[1,3] x[1,1] x[1,2]
x[5,0] x[5,3] x[5,1] x[5,2]
x[7,0] x[7,3] x[7,1] x[7,2]
x[2,0] x[2,3] x[2,1] x[2,2]

nditer创建一个容器,默认按行存储和输出

import numpy as np 

a = np.arange(0,60,5)
a = a.reshape(3,4)
print ('原始数组是:')
print (a)
print ('\n')
print ('以 C 风格顺序排序:')
for x in np.nditer(a, order = 'C'):
print (x, end=", " )
print ('\n')
print ('以 F 风格顺序排序:')
for x in np.nditer(a, order = 'F'):
print (x, end=", " ) 原始数组是:
[[ 0 5 10 15]
[20 25 30 35]
[40 45 50 55]] 以 C 风格顺序排序:
0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 以 F 风格顺序排序:
0, 20, 40, 5, 25, 45, 10, 30, 50, 15, 35, 55,

注意,numpy中,默认是按照行进行选取元素,如果想要对每个元素进行遍历,则需要使用flat

import numpy as np

a = np.arange(9).reshape(3,3)
print ('原始数组:')
for row in a:
print (row) #对数组中每个元素都进行处理,可以使用flat属性,该属性是一个数组元素迭代器:
print ('迭代后的数组:')
for element in a.flat:
print (element) 原始数组:
[0 1 2]
[3 4 5]
[6 7 8]
迭代后的数组:
0
1
2
3
4
5
6
7
8

像ravel和flatten,感觉记住reshape就可以了

rollaxis和swapaxis有点难想象,在脑海里画三维然后再把x、y、z轴进行视图转换,感觉一般也比较少用到?

</https:>

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. Python numpy学习笔记(一)

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

随机推荐

  1. websocket 实现简单网页版wechat

    1.群聊 web - socket--基于TCP/UDP http - 无状态的短链接 长连接:客户端和服务器保持永久性的链接,除非有一方主动断开, 轮询:客户端和服务端不断连接,然后断开,请求响应; ...

  2. 动态规划 洛谷P1616 疯狂的采药

    动态规划 洛谷P1616 疯狂的采药 同样也是洛谷的动态规划一个普及-的题目,接下来分享一下我做题代码 看到题目,没很认真的看数据大小,我就提交了我的代码: 1 //动态规划 洛谷P1616 疯狂的采 ...

  3. 让IE兼容background-size的方法_background-size ie下使用

    ie6,ie7,ie8下对css background-size并不支持,那么如何在ie下兼容background-size呢?在ie下把图片完整的居中显示在一定范围内在css中添加如下代码: fil ...

  4. 订单突破10000+,仅花1小时,APPx独家深入剖析背后的秘密!

    拼多多:成立三年,获客三亿,月订单成交额达到恐怖的400亿,成功上市! 糕妈优选:营销活动推送1小时,订单超过10000+,商品成功刷屏朋友圈! 寻慢:一场活动净增7000+粉丝,付款转化率高达71% ...

  5. java中请给出一个return this的例子。

    [新手可忽略不影响继续学习]下面例子中setYear中的return this;返回了一个指向对象的指针,this.setMonth(8).setDay(20);是合法的,如果像原来的例子一样什么都不 ...

  6. java读取xml文件并转换成对象,并进行修改

    1.首先要写工具类,处理读取和写入xml文件使用的工具.XMLUtil.javaimport java.io.FileInputStream; import java.io.FileWriter; i ...

  7. lunix或者centos服务器下如何下载自己在github上面的项目代码

    1.在github找到项目压缩包下载地址 打开自己的github主页找到需要下载的项目首页,如图所示,找到zip下载地址(ps:如何找这个地址我就不多说了,了解过一点html的同学肯定很容易可以找到) ...

  8. 在uniapp的节流函数

    为了解决同一个人连续多次的点击同一个事件会造成的问题,js解决的方法有防抖和节流,防抖和节流都是在一定的时间上控制次数 节流是在定义的时间内连续点击多次事件,只会执行一次 在uniapp的工具文件夹u ...

  9. 虚拟机VMware的安装与Xshell的应用

    先安装VMware 1.安装就按照提示一点点安装就行了 配置网络 打开VMware 这里的IOS映像文件在https://developer.aliyun.com/mirror/里下载 这里用方向键往 ...

  10. Golang 泛型的简单使用

    go 学习泛型,利用泛型编写对数据集合执行操作的方法.