今天有空再把numpy看一下,补充点不会的,再去看matplotlib


回顾之前笔记,发现之前的numpy学习Ⅰ中关于numpy的行、列、维可能表述有点不清晰,这里再叙述一下

import numpy as np
c = np.array([[[1,2],[1,2]],[[1,2],[0,0]],[[3,4],[5,6]],[[7,8],[9,0]]])
print("c:",c)
print("c.ndim:",c.ndim)
print("c.shape:",c.shape)

这里我们可以看成c有4个平面,每个平面2*2规模,实际上的维度为3

c: [[[1 2]
[1 2]] [[1 2]
[0 0]] [[3 4]
[5 6]] [[7 8]
[9 0]]]
c.ndim: 3
c.shape: (4, 2, 2)

上次学习了np.dtype创建新的数据类型,理解是理解了,但是过了一星期忘了怎么写,这里先回顾一下

当我们在numpy中创建自己的np.array,并且指定数据类型时,就需要使用np.dtype,首先看最简单的

  1. 直接使用dtype类型
import numpy as np
sex = np.dtype('int32')
a = np.array([1,2,3,4],dtype=sex)
print("sex:",sex)
print("a:",a)
sex: int32
a: [1 2 3 4]

也就是说我们指定sex的类型为int32类型,并且我们创建新的ndarray时指定数据类型

同时,int32我们可以用'i4'来代替

  1. 在最基础类型上,使用简写替代
import numpy as np
# int8, int16, int32, int64 四种数据类型可以使用字符串 'i1', 'i2','i4','i8' 代替
dt = np.dtype('i4')
print("dt:",dt)
b = np.array([5,6,7,8],dtype=dt)
print("b:",b)
dt: int32
b: [5 6 7 8]

这时候我们想使用结构化数据类型了

  1. 结构化,好处是可以到时候通过结构再调用(我猜的)
# 类型字段名可以用于存取实际的 age 列
import numpy as np
dt = np.dtype([('age',np.int8)])
a = np.array([(10,),(20,),(30,)], dtype = dt)
print("a:",a)
print("虽然我也很想直接使用a.age,但这里只能使用a['age']:",a['age'])
a: [(10,) (20,) (30,)]
虽然我也很想直接使用a.age,但这里只能使用a['age']: [10 20 30]

学到这里时再总结一下,np.array创建数组时,传入的是一个列表,或者说是张量,然后数组中每一行的列数对应我们创建数据类型的个数,听起来很绕,看下面的例子

  1. 创建复杂类型结构化数据
import numpy as np
student = np.dtype([('name','U2'), ('age', 'i4'), ('marks', 'f4')])
a = np.array([('abc', 21, 50.),('xyz', 18, 75.)], dtype = student)
print("studet:",student)
print("a:",a)
print("a['name']:",a["name"])
print("a['age']:",a['age'])
print("a['markd:']:",a["marks"])
studet: [('name', '<U2'), ('age', '<i4'), ('marks', '<f4')]
a: [('ab', 21, 50.) ('xy', 18, 75.)]
a['name']: ['ab' 'xy']
a['age']: [21 18]
a['markd:']: [50. 75.]

这里刻意写的U2,且原来的abc变成了ab,也可以试一下S3看一下结果

itemsize返回数组中每一个元素的大小

import numpy as np 

# 数组的 dtype 为 int8(一个字节)
x = np.array([1,2,3,4,5], dtype = np.int8)
print (x.itemsize) # 数组的 dtype 现在为 float64(八个字节)
y = np.array([1,2,3,4,5], dtype = np.float64)
print (y.itemsize)
1
8

回头看的时候发现numpy有个创建等比数列的函数,这里思考了一下首先用普通函数的方法实现

def proportional(n,m):
list1 = []
for i in range(n):
temp = m**i
list1.append(temp)
return list1
result = dengbi(10,1.5)
print(result) [1.0, 1.5, 2.25, 3.375, 5.0625, 7.59375, 11.390625, 17.0859375, 25.62890625, 38.443359375]

然后logspace函数主要是起点、终点、数目,底数

import numpy as np
a = np.logspace(0,9,10,base=2)
print (a) [ 1. 2. 4. 8. 16. 32. 64. 128. 256. 512.]

在之前的numpy学习中,也学习了解了一些获取数组中元素的方法,但是很混乱,这里再次总结一下

  1. 获取单个元素
import numpy as np
a = np.array([[[1,2],[1,2]],[[3,4],[5,6]],[[7,8],[9,10]],[[11,12],[13,14]]])
print("a:",a)
print("a[0,0,0]:",a[0,0,0])
print("a[0][0][0]:",a[0][0][0])
print("a[1][1][1]",a[1][1][1])
print("合起来的a[0][0][0]和a[1][1][1]:",a[(0,1),(0,1),(0,1)])
print("合起来的a[0][0][0]和a[1][1][1]:",a[[0,1],[0,1],[0,1]])

这里现在掌握了这两种方法,花里胡哨的还没掌握

  1. 获取行或者列
import numpy as np

a = np.array([[1,2,3], [4,5,6],[7,8,9]])
b = a[1:3, 1:3]
c = a[1:3,[1,2]]
d = a[...,1:]
print(b)
print(c)
print(d)

主要是通过:+,这样的组合来进行获取

  1. 条件索引
import numpy as np 

x = np.array([[  0,  1,  2],[  3,  4,  5],[  6,  7,  8],[  9,  10,  11]])
print ('我们的数组是:')
print (x)
print ('\n')
# 现在我们会打印出大于 5 的元素
print ('大于 5 的元素是:')
print (x[x > 5])

目前就先掌握这三种索引了


一开始并不清楚nditer是干嘛的,但当我遇到这个问题,遍历一个ndarray。numpy创建的数组是可迭代的,但是默认是按行进行,如果想一个一个进行输出,那么需使用nditer

import numpy as np

a = np.arange(6).reshape(2,3)
print ('原始数组是:')
print (a)
print ('\n')
print ('迭代输出元素:')
for x in np.nditer(a):
print (x, end=", " )
print ('\n')
原始数组是:
[[0 1 2]
[3 4 5]] 迭代输出元素:
0, 1, 2, 3, 4, 5,

numpy的迭代,弄懂了一些,但还是有一些不明白,先记录下来

import numpy as np

a = np.arange(0,60,5)
a = a.reshape(3,4)
print ('原始数组是:')
print (a)
print ('\n')
for x in np.nditer(a, op_flags=['readwrite']):
x[...]=2*x
print ('修改后的数组是:')
print (a)

第一次接触到python的... 这里的... 表示如果a里面有1个元素,那么就补齐1个元素,如果有数组,那么就补齐数组

import numpy as np
d = np.array([[[i + 2*j + 8*k for i in range(3)] for j in range(3)] for k in range(3)])
print(d)
print(d[...,0])
print(d[0,...])
print(d[...,0,:])

这里是对不同维度进行切片

若想对不同维度进行最大值取值,可以用amax函数

numpy学习Ⅱ的更多相关文章

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

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

  2. NumPy学习笔记 二

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

  3. NumPy学习笔记 一

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

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

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

  5. NumPy学习(索引和切片,合并,分割,copy与deep copy)

    NumPy学习(索引和切片,合并,分割,copy与deep copy) 目录 索引和切片 合并 分割 copy与deep copy 索引和切片 通过索引和切片可以访问以及修改数组元素的值 一维数组 程 ...

  6. NumPy学习(让数据处理变简单)

    NumPy学习(一) NumPy数组创建 NumPy数组属性 NumPy数学算术与算数运算 NumPy数组创建 NumPy 中定义的最重要的对象是称为 ndarray 的 N 维数组类型. 它描述相同 ...

  7. numpy 学习笔记

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

  8. numpy 学习总结

    numpy 学习总结 作者:csj更新时间:01.09 email:59888745@qq.com 说明:因内容较多,会不断更新 xxx学习总结: 回主目录:2017 年学习记录和总结 #生成数组/使 ...

  9. (转)Python数据分析之numpy学习

    原文:https://www.cnblogs.com/nxld/p/6058572.html https://morvanzhou.github.io/tutorials/data-manipulat ...

  10. Numpy学习1

    NumPy学习(1) 参考资料: http://www.cnblogs.com/zhanghaohong/p/4854858.html http://linusp.github.io/2016/02/ ...

随机推荐

  1. js Object扩展自定义方法,jQuery抛出 Uncaught TypeError: matchExpr[type].exec is not a function

    使用Jquery的时候,想在Object原型上添加自己扩展的方法的时候,启动项目之后,打开网页就会报如上错误信息,经过测试,可以在Object下的具体类型上进行扩展自定义方法,如String,Arra ...

  2. HTML 5中的本地存储概念?

    很多时候,我们想在本地计算机存储有关用户的信息.例如,假设用户已经填满了一半的长表单,互联网却突然连接中断.此时,用户希望能在本地存储这些信息,然后当重新连接到互联网的时候,获取这些信息,并将其发送到 ...

  3. Effective Java —— 覆盖equals时遵守通用约定

    本文参考 本篇文章参考自<Effective Java>第三版第十条"Obey the general contract when overriding equals" ...

  4. 4.4 ROS节点名称重名

    4.4 ROS节点名称重名 场景:ROS 中创建的节点是有名称的,C++初始化节点时通过API:ros::init(argc,argv,"xxxx");来定义节点名称,在Pytho ...

  5. Clickhouse 纯手工迁移表

    [应用场景] 由于一些未可知的原因,导致原表不可用,也不能恢复.通过手动迁移的方法来恢复业务 [解决办法] 新建一张 copy 表,把原表的 data 目录复制到新表的data 目录,并 attach ...

  6. Vuet.js规则详解,它是你不知道的强大功能?

    Vuet.js是什么? Vuet.js是给Vue.js提供状态管理的一个工具,与vuex不同,它是一种崇尚规则定制的状态管理模式.事先将状态更新的规则写好,然后将规则注入到组件中,然后状态按照预订的规 ...

  7. 小程序wx.getRecorderManager()录音管理

    小程序中提供了两种录音的API,wx.startRecord和wx.getRecorderManager(),前一个现在微信团队已经不再维护,所以在这里写一下新的录音管理,比之前要强大 1.小程序录音 ...

  8. Android 动态控制OptionMenu的显示与隐藏

    在有些场景下,可能需要动态的显示和隐藏optionmenu,可以这样实现:如果在activity中默认实现了方法: onCreateOptionsMenu(Menu menu) 那么该OptionMe ...

  9. Blazor 在开发环境保存机密(User Secrets)

    前言 在应用程序开发的过程中,有的时候需要在代码中保存一些机密的信息,比如微信appkey, 连接字符串,加密密钥,字符串,或者是用户名密码等.通常的做法是保存到一个配置文件中,例如 appsetti ...

  10. java实现ssh连接工具类

    import ch.ethz.ssh2.Connection;import ch.ethz.ssh2.Session;import ch.ethz.ssh2.StreamGobbler;import ...