概述
第二章Numpy基础
涵盖以下内容:
1.数据类型
2.数组类型
3.类型转换
4.创建数组
5.数组索引
6.数组切片
7.改变维度
先创建数组:
import numpy as np #导入numpy库
a = np.arange(5) #创建一维数组
a.dtype 得到dtype(‘int64’) #获取数据类型
a 得到array([0,1,2,3,4])
a.shape 得到(5,) #(获取每一维度的大小)返回一个元组,元组中的元素即为数组每一个维度上的大小,比如一维数组大小为5即为(5,)
创建多维数组:
m = np.array([np.arange(2), np.arange(2)]) #创建一个二维数组
m 得到array([[0,1], [0,1]])
m.shape 得到(2,2)2行2列
ndarray对象维度属性的存储方式?
1.逗号隔开的字符串
2.python列表(list)
3.python元组(tuple)
选取数组元素:(如果需要选取某个特定元素)
a = np.array([[1,2], [3,4]])
a 得到array([[1,2], [3,4]])
a[0,0]或者a[0][0] 得到1
a[0,1]或者a[0][1] 得到2
a[1,0]或者a[1][0] 得到3
a[1,1]或者a[1][1] 得到4
a[0] 得到array([1,2])
a[1] 得到array([3,4])
数据类型:均有相应的类型转换函数
举几个常用例子(没法一一列出)
float64
int8
bool
float
字符编码:记下几个常见的比如
D:复数
f:单精度浮点数
d:双精度浮点数
因此可以自定义数据类型
使用np.dtype()
创建数据类型:
t = np.dtype([('name', np.str_, 40), ('numitems', int32), ('price', float32)])
一维数组的切片和索引:
a = np.arange(9)
a[3:7] 得到array([3,4,5,6])
a[:7:2] 得到array([0,2,4,6])
a[::-1] 得到array([8,7,6,5,4,3,2,1,0])
多维数组的切片和索引:
b = np.arange(24).reshape(2,3,4) #创建一个三维数组
b.shape 得到(2,3,4)
b[0,0,0] 得到第一层第一行第一列的元素
b[:,0,0] 得到所有层第一行第一列的元素
b[0] 得到第一层的所有元素
b[0, :, :] 选取第一层所有行所有列的元素
b[0, ...] 多个冒号可以使用省略号代替,这里的省略号指的是三个句点“...”
b[0,1] 选取第一层第二行的所有元素
b[0, 1, ::2] 选取第一层第二行的以2为间隔的元素
b[..., 1] 选取所有层所有行的第二列元素
b[:, 1] 选取所有层的第二行元素
b[0, :, 1] 选取第一层所有行的第二列的元素
b[0, :, -1] 选取第一层所有行的倒数第一列的元素
b[0, ::-1, -1] 选取第一层反向所有行的倒数第一列的元素
b[0. ::2, -1] 选取第一层以2为间隔的行的倒数第一列的元素
b[::-1] 反转所有层的元素
改变数组的维度:
b = np.arange(24).reshape(6, 4)
b.ravel() 用ravel实现展平操作,马上变成一维数组
b.flatten() 效果同ravel,不过ravel只是返回数组的一个视图,flatten会尝试请求分配内存保存结果。
b.shape 效果同reshape(),可以这样操作,b.shape = (6, 4),用一个元组赋值给b.shape,达到reshape(6, 4)的效果
b.transpose() 转置矩阵函数,也是比较重要的函数之一。(行变列,列变行)
b.resize((2, 12)) 和reshape一样的效果,区别是resize直接作用于数组
组合数组:
numpy数组有水平组合,垂直组合,深度组合等多种组合形式(行组合,列组合)。
a = np.arange(9).reshape(3, 3)
b = 2 * a
np.hstack((a, b)) 水平组合(horizontal:水平的,所以英文缩写是h)
np.concatenate((a, b), axis = 1) 效果就是水平组合
np.vstack((a, b)) 垂直组合(vertical:垂直的,所以缩写字母是v)
np.concatenate((a, b), axis = 0) 效果同垂直组合
np.dstack((a, b)) 深度组合(deep),就是将一系列数组沿着纵轴方向进行层叠组合。
数组的分割:
numpy数组可以进行水平,垂直和深度分割。
a = np.arange(9).reshape(3, 3)
np.hsplit((a, 3)) 水平分割,每一行的每个元素都隶属于相应的子数组,就是水平分割,或者这样看:水平分割的子数组是原数组的每一列的元素
np.split(a, 3, axis = 1) 效果同水平分割
np.vsplit(a, 3) 垂直分割,每一列的每个元素都隶属于相应的子数组,就是垂直分割,或者这样看:垂直分割的子数组是原数组的每一行的元素。
np.split(a, 3, axis = 0) 效果同垂直分割
c = np.arange(27).reshape(3,3,3)
np.dsplit(c, 3) 深度分割,与深度组合相反,就是将整个数组沿纵轴一列列切开,每一列单独成为一个子数组。
数组的属性:
除了常见的np.shape, np.dtype, 还有许多例如
假设b = np.arange(24).reshape(2, 12)
b.ndim 给出数组的维数
b.size 给出数组元素的总个数
b.itemsize 给出数组中的元素在内存中所占的字节数
b.nbytes b.size * b.itemsize的结果,就是整个数组所占的内存空间
b.resize 与reshape效果相同,不过resize直接作用于数组
b.T 效果同transpose,即转置矩阵
b.real 给出复数数组的实部
b.imag 给出复数数组的虚部
b.dtype 查看数组类型
数组的转换:
numpy数组转换成python列表
b.tolist() numpy数组转换成python列表
b.astype(int) 转换时可指定数据类型
第二章小结:
最重要的是一维数组的切片和索引,多维数组的切片和索引,数组的组合与分割,以及数组的属性,这些都是numpy模块最有优势的地方,本篇也是可以反复翻看的numpy笔记吧。下一章:numpy常用函数。
最后
以上就是羞涩小甜瓜为你收集整理的Numpy学习指南首篇笔记的全部内容,希望文章能够帮你解决Numpy学习指南首篇笔记所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复