数组转置和轴对换

转置是重塑的一种特殊形式,返回的是源数据的视图(不会进行任何复制操作)。数组不仅有transpose方法,还有一个特殊的T属性:

arr=np.arange().reshape((,))

arr
Out[]:
array([[ , , , , ],
[ , , , , ],
[, , , , ]]) arr.T
Out[]:
array([[ , , ],
[ , , ],
[ , , ],
[ , , ],
[ , , ]])

进行矩阵计算时,经常需要用到该操作,比如利用np.dot计算矩阵内积:

arr=np.random.randn(,)

np.dot(arr.T,arr)
Out[]:
array([[2.39679519, 0.23607287, 0.27316386],
[0.23607287, 5.3207093 , 0.6367557 ],
[0.27316386, 0.6367557 , 3.50480009]])

对于高维数组,transpose需要得到一个由轴编号组成的元组才能对这些轴进行转置:

arr=np.arange().reshape((,,))

arr
Out[]:
array([[[ , , , ],
[ , , , ]], [[ , , , ],
[, , , ]]]) arr.transpose((,,))
Out[]:
array([[[ , , , ],
[ , , , ]], [[ , , , ],
[, , , ]]])

还有一个swapaxes方法,它需要接收一对轴编号:

arr
Out[]:
array([[[ , , , ],
[ , , , ]], [[ , , , ],
[, , , ]]]) arr.swapaxes(,)
Out[]:
array([[[ , ],
[ , ],
[ , ],
[ , ]], [[ , ],
[ , ],
[, ],
[, ]]])

swapaxes也是返回源数据的视图(不会进行任何复制操作)。

通用函数:快速的元素级数组函数

通用函数(即ufunc)是一种对ndarray中的数据执行元素级运算的函数。可以将其看做简单函数(接收一个或多个标量值,并产生一个或多个标量值)的矢量化包装器。
许多ufunc都是简单的元素级变体,如sqrt和exp:
x=np.random.randn(8)

x
Out[7]:
array([-0.45367765, 0.45448697, 0.05901557, -1.14350864, 0.93985719,
-1.37405764, 0.54604076, -1.52919879]) y=np.random.randn(8) y
Out[9]:
array([-2.44401238, -0.57907323, -2.42303926, 0.25004382, 0.78757902,
0.13324314, 0.8643189 , 0.6892275 ]) #x,y中的每个元素进行对比,选较大的值
np.maximum(x,y)
Out[10]:
array([-0.45367765, 0.45448697, 0.05901557, 0.25004382, 0.93985719,
0.13324314, 0.8643189 , 0.6892275 ])

有些ufunc可以返回多个数组,modf就是一个例子,它是Python内置函数divmod的矢量化版本,用于浮点数组的小数和整数部分。

 arr=np.random.randn(7)*5

 arr
Out[12]:
array([ 1.36965276, -0.29453957, 5.0043914 , -3.93568688, -4.50608498,
1.40926456, -1.99294205]) #modf返回的2个数组分别是浮点数的小数部分和整数部分
np.modf(arr)
Out[13]:
(array([ 0.36965276, -0.29453957, 0.0043914 , -0.93568688, -0.50608498,
0.40926456, -0.99294205]), array([ 1., -0., 5., -3., -4., 1., -1.]))
                                       一元ufunc(几个常用的)
abs、fabs 计算整数、浮点数或复数的绝对值。对于非复数值,可以使用更快的fabs
sqrt 计算各元素的平方根,相当于arr**0.5
square 计算各元素的平方,相当于arr**2
exp 计算各元素的指数
                                                 
                                          二元ufunc
add 将数组中对应的元素相加
substract 从第一个数组中减去第二个数组中的元素
multiply 数组元素相乘
divide、floor_divide 除法或向下圆整除法(丢弃余数)

利用数组进行数据处理

用数组表达式代替循环的做法,通常被称为矢量化。一般来说,矢量化数组运算要比等价的纯Python方式快上一两个数量级(甚至更多),尤其是各种数值计算。
假设我们想要在一组值(网格型)上计算函数sqrt(x**2+y**2)。np.meshgrid函数接受两个一维数组,并产生两个二维矩阵:
 points=np.arange(-5,5,0.01)

 xs,ys=np.meshgrid(points,points)

 ys
Out[16]:
array([[-5. , -5. , -5. , ..., -5. , -5. , -5. ],
[-4.99, -4.99, -4.99, ..., -4.99, -4.99, -4.99],
[-4.98, -4.98, -4.98, ..., -4.98, -4.98, -4.98],
...,
[ 4.97, 4.97, 4.97, ..., 4.97, 4.97, 4.97],
[ 4.98, 4.98, 4.98, ..., 4.98, 4.98, 4.98],
[ 4.99, 4.99, 4.99, ..., 4.99, 4.99, 4.99]])

现在把这两个数组当做两个浮点数那样编写表达式:

 import matplotlib.pyplot as plt

 z=np.sqrt(xs**2+ys**2)

 z
Out[21]:
array([[7.07106781, 7.06400028, 7.05693985, ..., 7.04988652, 7.05693985,
7.06400028],
[7.06400028, 7.05692568, 7.04985815, ..., 7.04279774, 7.04985815,
7.05692568],
[7.05693985, 7.04985815, 7.04278354, ..., 7.03571603, 7.04278354,
7.04985815],
...,
[7.04988652, 7.04279774, 7.03571603, ..., 7.0286414 , 7.03571603,
7.04279774],
[7.05693985, 7.04985815, 7.04278354, ..., 7.03571603, 7.04278354,
7.04985815],
[7.06400028, 7.05692568, 7.04985815, ..., 7.04279774, 7.04985815,
7.05692568]])
plt.imshow(z,cmap=plt.cm.gray);plt.colorbar()
Out[22]: <matplotlib.colorbar.Colorbar at 0xc95aef0>

读书笔记五--numpy的更多相关文章

  1. 悟道—位IT高管20年的职场心经(读书笔记五)

    悟道--一位IT高管20年的职场心经 第五章 搞定老板 "老板就是老板" 这一点,你可能会忘了,他一定不会忘: "老板不会总是老板" 这一点,他可能会忘,你最好 ...

  2. 《JavaScript 高级程序设计》读书笔记五 引用类型

    一   Object类型 a.两种创建方式: 1.new+构造函数Object; 2.对象字面量表示法: b.两种访问属性方式: 1.点表示法(.属性): 2.方括号([“属性”]): 二   Arr ...

  3. Android驱动开发读书笔记五

    第五章 本章介绍了S3C6410开发板的功能,开发板的不同主要是在烧录嵌入式系统的方式不同,以及如何在此开发板上安装Android. 1.安装串口调试工具minicom 首先需要一根USB转串口线,由 ...

  4. 机器学习实战读书笔记(五)Logistic回归

    Logistic回归的一般过程 1.收集数据:采用任意方法收集 2.准备数据:由于需要进行距离计算,因此要求数据类型为数值型.另外,结构化数据格式则最佳 3.分析数据:采用任意方法对数据进行分析 4. ...

  5. 《实战Java高并发程序设计》读书笔记五

    第五章 并行模式与算法 1.单例模式 是一种对象创建模式,用于产生一个对象的具体实例,它可以确保系统一个类只产生一个实例. 对于频繁创建使用的对象可以省略new 操作花费的时间,可以减少系统开销. 由 ...

  6. 锋利的jQuery--编写jQuery插件(读书笔记五)[完结篇]

    1.表单验证插件Validation   2.表单插件Form   3.动态事件绑定插件livequery 可以为后来的元素绑定事件   类似于jQuery中的live()方法     4.jQuer ...

  7. 《CLR.via.C#第三版》第二部分第10,11章节读书笔记(五)

    第10章是对 属性 做阐述 属性本质上是方法 匿名类型的使用: }; Console.WriteLine("Name={0},Year={1}",o1.Name,o1.Year); ...

  8. R语言实战读书笔记(五)高级数据管理

    5.2.1 数据函数 abs: sqrt: ceiling:求不小于x的最小整数 floor:求不大于x的最大整数 trunc:向0的方向截取x中的整数部分 round:将x舍入为指定位的小数 sig ...

  9. Machine Learning for hackers读书笔记(五)回归模型:预测网页访问量

    线性回归函数 model<-lm(Weight~Height,data=?) coef(model):得到回归直线的截距 predict(model):预测 residuals(model):残 ...

随机推荐

  1. 【目录】asp.net core系列篇

    随笔分类 - asp.net core系列篇 asp.net core系列 68 Filter管道过滤器 摘要: 一.概述 本篇详细了解一下asp.net core filters,filter叫&q ...

  2. css3新增(圆角边框(border-radius),盒子阴影(box-shadow),文字阴影(text-shadow),背景缩放(background-size))

    1.圆角边框  border-radius border-radius 属性用于设置元素的外边框圆角 语法:border-radius:length; 参数值可以是数值 或者 百分比 的形式 正方形, ...

  3. Android开发:图文分析 Handler通信机制 的工作原理

    前言 在Android开发的多线程应用场景中,Handler机制十分常用 下面,将图文详解 Handler机制 的工作原理 目录 1. 定义 一套 Android 消息传递机制 2. 作用 在多线程的 ...

  4. testparm - 检查smb.conf配置文件的内部正确性

    总览 testparm [-s] [-h] [-L servername] [configfilename] [hostname hostIP] 描述 此程序是samba套件的一部分. testpar ...

  5. Vue学习笔记【3】——Vue指令之v-bind的三种用法

    直接使用指令v-bind 使用简化指令: 在绑定的时候,拼接绑定内容::title="btnTitle + ', 这是追加的内容'" <!DOCTYPE html> & ...

  6. applicationContext-redis.xml配置文件

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...

  7. PHP ftp_cdup() 函数

    定义和用法 ftp_cdup() 函数把当前目录改变为 FTP 服务器上的父目录. 如果成功,该函数返回 TRUE.如果失败,则返回 FALSE. 语法 ftp_cdup(ftp_connection ...

  8. 管理员技术(一):装机预备技能、安装一台RHEL7虚拟机、使用RHEL7图形桌面、Linux命令行基本操作

    一.装机预备技能 问题: 本例要求安装一台可用的KVM服务器:      1> RHEL与CentOS系统有什么关联?      2> 第2块SCSI硬盘的第3个逻辑分区,Linux如何表 ...

  9. hive建模方法

    转自:https://www.jianshu.com/p/8378b80e4b21 概述数据仓库这个概念是由 Bill Inmon 所提出的,其功能是将组织通过联机事务处理(OLTP)所积累的大量的资 ...

  10. matlab中的 ndims(a)、length(a)、size(a) 分别是什么意思?

    size(a)表示矩阵每个维度的长度比如size([1 2 3;4 5 6])等于[2 3]表示他有2行3列size([1 2 3])等于[1 3]表示他有1行3列另外size(a,n)表示矩阵a在第 ...