Numpy学习指南首篇笔记

第二章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常用函数。

猜你喜欢

转载自blog.csdn.net/honorwh/article/details/89211461