一直被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. Java 中,Serializable 与 Externalizable 的区别?

    Serializable 接口是一个序列化 Java 类的接口,以便于它们可以在网络上传输 或者可以将它们的状态保存在磁盘上,是 JVM 内嵌的默认序列化方式,成本高. 脆弱而且不安全.Externa ...

  2. HTML 5的页面结构和HTML 4或早先的HTML有什么不同?

    一个典型的Web页面有页眉(header),页脚(footer),导航(navigation),正文(central area)和侧栏(side bar).现在如果是在HTML 4中,HTML部分中的 ...

  3. IOS中弹出键盘后出现fixed失效现象的解决方案

    概述 这个问题常出现在移动web开发中聊天或者留言页面的绝对定位输入框上,页面超过屏幕大小时候输入框focus状态下(键盘弹出)绝对定位的元素失效,导致页面滚动时候把定位元素一并带走,体验十分不好,在 ...

  4. css3中user-select的用法详解

    css3中user-select的用法详解 user-select属性是css3新增的属性,用于设置用户是否能够选中文本.可用于除替换元素外的所有元素,以下是user-select的主要用法和注意事项 ...

  5. python计算项目净现值和内部回报率

     代码: import numpy as np from numpy import irr import warnings def project(number, period_list): rate ...

  6. 将子分支代码merge到主分支master分支

    1.首先切换到子分支: git checkout develop2.使用git pull 把分支代码pull下来: git pull3.切换到主分支: git checkout master4.把分支 ...

  7. 体验了一把最近很火的开源项目-MASA Blazor

    前言 很惭愧直到去年底才接触到Blazor.那什么是Blazor呢?相信大家都看过官方文档的详细说明,另外MASA团队也有不错的说明介绍 .用官方的话说Blazor是一个交互式客户端Web UI的框架 ...

  8. springboot集成spring security实现登录和注销

    文章目录 一.导入坐标 二.Users实体类及其数据库表的创建 三.controller,service,mapper层的实现 四.核心–编写配置文件 五.页面的实现 运行结果 一.导入坐标 < ...

  9. LC-977

    给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序. 示例 1: 输入:nums = [-4,-1,0,3,10] 输出:[0,1,9,1 ...

  10. linux磁盘分区fdisk命令操作(实践)

    写这篇的目的,还是要把整个过程完整的记录下来,特别是小细节的地方,通常很多情况是一知半解,平时不实践操作只凭看是没有用的,所以做这个行业就是要多动手,多学习,多思考慢慢你的思路也会打开.练就自己的学习 ...