一直被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. (转载)JSON对象使用变量作为键名

    转载链接:https://blog.csdn.net/lihefei_coder/article/details/82499520 //第一种方式 var key = 'name'; var json ...

  2. 学习Nginx(三)

      nginx的性能测试及常用优化手段 一.nginx的性能测试及对比 1.环境准备 [root@test8_hadoop_kaf ~]# yum install -y httpd-tools [ro ...

  3. Arduino 烧写bootloader

    什么是bootloader 一般情况下微处理器写入程序时都通过专门的编程器进行烧写,但是也可以通过在MCU中预先写入一些程序来实现某些基本功能,这些预先写入的程序代码就是bootloader.这样每次 ...

  4. PCB设计常见规则及基本原则

    一.PCB基础知识 1.全称:印制电路板或者印制线路板 2.分类 材质分类:硬板(Rigid PCB).软板FPC(Flexible PCB).软硬结合板(Rigid-Flex PCB).HDI板(含 ...

  5. javaweb图书管理系统之不同用户跳转不同页面

    关于分级自测题,我们知道该系统一共分为两个角色,一个是读者,一个是管理员,我们需要根据不同用户去到不同的页面,所以我们需要写一个登陆界面. 本文先写这个功能的实现,该功能主要在servlet里面实现. ...

  6. java中switch结构和 while for循环的用法

    6.2 switch结构:    变量可以是:variable can be:(mark: tried, can not be long) char/int/short/byte(java1.7 就可 ...

  7. linux-RHEL7.0 —— 《Linux就该这么学》阅读笔记

    目录 linux-RHEL7.0 安装部署 修改root密码 RPM(红帽软件包管理器) YUM(软件仓库) Systemd初始化进程 总结 linux命令 帮助命令 man 系统工作命令 echo ...

  8. 递归函数求n!

    #include<iostream> using namespace std; int main() { int n; cin>>n; int jieceng(int); co ...

  9. Python接口自动化——文件上传/下载接口

    〇.前言 文件上传/下载接口与普通接口类似,但是有细微的区别. 如果需要发送文件到服务器,例如:上传文档.图片.视频等,就需要发送二进制数据,上传文件一般使用的都是 Content-Type: mul ...

  10. Mybatis插入数据

    对上文->Mybatis快速入门-<进行代码修改 1.在UserMapper.xml中添加插入操作 <!-- 插入操作--> <insert id="save& ...