目录##

掌握numpy(一)

掌握numpy(二)

掌握numpy(三)

掌握numpy(四)

数组的reshape##

顾名思义,就是对数组的形状进行改变,比如行变成列,一行变多行等。

in place###

通过使用ndarrayshape属性能够轻松的改变数组的形状,需要保证的是前后变换的size大小一样

g = np.arange(24)#生成24个数字
print(g)
>>print"Rank:", g.ndim
[ 0 1 2 ..., 21 22 23]
Rank: 1

进行变换

g.shape = (6, 4)
print(g)
>>print "Rank:", g.ndim
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]
Rank: 2

元素以及大小未发生变化,rank变成了2。这种转换方式g的值发生了变化,所以叫做in place转换

reshape###

reshape方法返回了一个新的数组对象,但该对象指向原始的数值,这也就意味着修改其值也将影响到原始对象,下面是例子

g = np.arange(24)
g2 = g.reshape(4,6)
>>g2
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]])

目前g2是一个二维数组,我们可以修改其元素的值,不过与我们学过其他语言用法是a[1][2],numpy支持以下用法

g2[1, 2] = 999 #等价于g2[1][2] =999
>>g[7] #原始g的值也发生了变化
999

ravel###

既然numpy通过reshape能够将数组转换为其他的形状,那么ravel就能将数组转化为一个1维的数组

a = np.array([[1,2,3,4],[5,6,7,8]])
>>a
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
>>a.ravel()
array([1, 2, 3, 4, 5, 6, 7, 8])

算数运算##

a = np.array([14, 23, 32, 41])
b = np.array([5, 4, 3, 2])
print("a + b =", a + b)
print("a - b =", a - b)
print("a * b =", a * b)
print("a / b =", a / b)
print("a // b =", a // b)
print("a % b =", a % b)
>>print("a ** b =", a ** b)
a + b = [19 27 35 43]
a - b = [ 9 19 29 39]
a * b = [70 92 96 82]
a / b = [ 2.8 5.75 10.66666667 20.5 ]
a // b = [ 2 5 10 20]
a % b = [4 3 2 1]
a ** b = [537824 279841 32768 1681]

参与运算的变量需要有着相同的形状,否则会按照broadcasting形式参与运算

broadcasting##

ndarray参与运算的时候,期望变量的维度一样,如果不一样的话就会按照broadcasting规则运算

规则一###

如果数组形状不一样
a = np.array([1,2,3,4])
>>a + 4
array([5, 6, 7, 8])

规则二###

沿着维度值较大的那一维度进行运算

k = np.arange(6).reshape(2, 3)
>>k + [[100], [200]]
array([[100, 201, 302],
[103, 204, 305]])

规则三###

大小完全一样,下面的代码将会报错

k = np.arange(6).reshape(2, 3)
try:
k + [33, 44]
except ValueError as e:
print(e)

上转型###

经常编程的会知道转型,比如int转到long为上转,反之为下转。当两个类型不同的ndarray计算的时候,numpy默认的为上转型

k1 = np.arange(0, 5, dtype=np.uint8)
>>k1.dtype
dtype('uint8')

不同类型的参与计算

k2 = k1 + np.array([5, 6, 7, 8, 9], dtype=np.int8)
>>k2.dtype
dtype('int16')

上面结果的类型为int16(范围为-32768_32767),实际上uint8已经足够了

k3 = k1 + 1.5
>>k3.dtype
float64

条件运算符###

条件运算符会应用到每一个元素

m = np.array([20, -5, 30, 40])
>>m < [25,25,25,25]
array([ True, True, False, False], dtype=bool)

上面还可以借助broadcasting,简化写法

>>m < 25
array([ True, True, False, False], dtype=bool)

如果我想通过条件运算过滤出其中的元素,那么该怎么做呢?

>>m[m<25]
array([20, -5])

如果是两个数组做对比呢?

a = np.array([1, -2, 3, 4])
b = np.array([2, 8, -1, 7])
>>np.greater(a, b) #等价与 a>b
array([False, False, True, False], dtype=bool)
>>np.maximum(a, b)
array([2, 8, 3, 7])

如果找出数组中满足某个条件的元素呢?

>>x = np.arange(9.).reshape(3, 3)
array([[ 0., 1., 2.],
[ 3., 4., 5.],
[ 6., 7., 8.]])
>>result = np.where( x > 5 )
(array([2, 2, 2], dtype=int64), array([0, 1, 2], dtype=int64))#输出的为坐标[(2,0),(2,1),(2,2)]

如何转化为坐标形式呢?

>>list(zip(*result))
[(2, 0), (2, 1), (2, 2)]

掌握numpy(二)的更多相关文章

  1. numpy(二)

    1.集合操作 包含去重,交,并,差集操作 2.排序.搜索和计数 sort,where,argmin,argmax,count_nonzero,argwhere 3.线性代数 np.linalg库,包含 ...

  2. numpy数组(4)-二维数组

    python创建二维 list 的方法是在 list 里存放 list : l = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]] numpy可以直接 ...

  3. Python二维数据分析

    一.numpy二维数组 1.声明 import numpy as np #每一个[]代表一行 ridership = np.array([ [ 0, 0, 2, 5, 0], [1478, 3877, ...

  4. 掌握numpy(一)

    NumPy是一款用于科学计算的python包,强大之处在于矩阵的运算以及包含丰富的线性代数运算的支持.本文将对numpy一些常用的用法进行讲解,一来是对自己的知识进行梳理,二来作为一份备忘录供以后查阅 ...

  5. 掌握numpy(三)

    统计功能 前面都是介绍numpy的一些特性,被称为数学运算神器怎么能少了统计功能呢 ndarray的方法 a = np.array([[-2.5, 3.1, 7], [10, 11, 12]]) &g ...

  6. 掌握numpy(四)

    数组的累加(拼接) 在前面讲了使用切片方法能够对数组进行切分,使用copy对切片的数组进行复制,那么数组该如何拼接呢? a1 = np.full((2,3),1)#填充数组 a2 = np.full( ...

  7. 浅析Numpy.genfromtxt及File I/O讲解

    Python 并没有提供数组功能,虽然列表 (list) 可以完成基本的数组功能,但它并不是真正的数组,而且在数据量较大时,使用列表的速度就会慢的让人难受.为此,Numpy 提供了真正的数组功能,以及 ...

  8. Numpy 系列(十一)- genfromtxt函数

    定义输入 genfromtxt的唯一强制参数是数据的源.它可以是字符串,字符串列表或生成器.如果提供了单个字符串,则假定它是本地或远程文件或具有read方法的打开的类文件对象的名称,例如文件或Stri ...

  9. numpy创建array【老鱼学numpy】

    在上一篇文章中,我们已经看到了如何通过numpy创建numpy中的数组,这里再重复一下: import numpy as np # 数组 a = [[1, 2, 3], [4, 5, 6]] prin ...

随机推荐

  1. 关于svg

    动画:css3动画,canvas(js动画),svg(html动画). svg基本元素 version: 表示 <svg> 的版本,目前只有 1.0,1.1 两种 xmlns:http:/ ...

  2. html5开发学习 html5自学需要怎么学

    记得很多大鳄都说过一句话:只要站在风口上,猪都能飞起来.而对于如今的IT技术领域来说,无疑这只幸运的"猪"非html5莫属.html5开发技术在16年迎来了一个飞跃的发展,这也让很 ...

  3. 十六、Hadoop学习笔记————Zookeeper实战

    所有服务器都会先将自己的服务器信息注册到servers中,然后每台服务器都会尝试注册master,哪台注册成功,则哪台就是master服务器. 所有的服务器都会关注master节点的删除事件,这样通过 ...

  4. Winform 中 dataGridView 导出到Excel中的方法总结

    最近,在做CS端数据导出到Excel中时网上找了很多代码感觉都不是自己想要的,通过自己的整理归纳得到一个比较通用的方法,就给大家分享一下: 该方法需要用到两个参数(即对象),一个  DataGridV ...

  5. null与undefined的比较

    null在JavaScript中是关键字,它属于一个特殊的值,即空值. 而undefined它不是关键字,它表示未定义,属于预定义的全局变量. null == undefined 返回的是 true  ...

  6. Linux系统bashshell之别名

    1.别名的查看: 命令查看:alias 配置文件查看:cat  ~/.bashrc 2:别名设置: alias  cdnet="cd  /etc/sysconfig/network-scri ...

  7. Python入门 - 面向对象

    python很好的支持面向对象编程,本节主讲类的定义,类的构造方法,类的继承与方法重写,类的多继承. 一.类的定义 class Myclass() : def prt(self, str) : pri ...

  8. 服务器获取浏览器发送请求中的cookies,选取自己需要的cookie

    String cookieName = “userID”; // 设置自己需要的cookie名 Cookie cookies[] = request.getCookies(); // 获取请求中的所有 ...

  9. 实践作业2:黑盒测试实践——在被测系统上录制脚本 Day 5

    1.处理了学生信息管理系统运行的小细节 2.总结了katalon的使用流程如下 a.在Katalon Studio中创建一个自动化测试项目. b.创建一个测试案例,用来写入所有必要的测试步骤 c.编写 ...

  10. 实践作业1:测试管理工具实践 Day4

    由小组吴辉同学和王俊杰同学负责撰写使用手册,详细记录了环境配置完整过程,以及从软件登陆开始,创建一个测试计划,创建新版本,创建测试用例集,分配测试用例到测试计划,关联到测试用例这一系列完整过程. 刘思 ...