一、NumPy ndarray
(一)生成ndarray
函数 | 描述(默认数据类型是float64) |
array | 将输入数据(序列型对象)转换为ndarray,若不显示的指定数据类型,将自动推断;默认复制所有的输入数据 |
asarray | 将输入转换为ndarray。但如果输入已经是ndarray,则不再复制 |
arange | python内建函数range的数组版,返回一个数组 |
ones | 根据指定形状和数据类型生成全1数组 |
ones_like | 根据所给的数组生成一个形状一样的全1数组 |
zeros | 根据给定形状和数据类型生成全0数组 |
zeros_like | 根据所给的数组生成一个形状一样的全0数组 |
empty | 根据给定形状生成一个没有初始化数值的空数组 |
empty_like | 根据所给的数组生成一个形状一样但没有初始化数值的空数组 |
full | 根据给定形状和数据类型生成指定数值的数组 |
full_like | 根据所给的数组生成一个形状一样但内容是指定数值的数组 |
eye,identity | 生成一个N×N特征矩阵(对角线位置都是1,其余位置是0) |
(二)ndarray的数据类型
类型 | 类型代码 | 描述 |
int8,unit8 | i1,u1 | 有符号和无符号的8位整数 |
int16,uint16 | i2,u2 | 有符号和无符号的16位整数 |
int32,uint32 | i4,u4 | 有符号和无符号的32位整数 |
int64,uint64 | i8,u8 | 有符号和无符号的64位整数 |
float16 | f2 | 半精度浮点数 |
float32 | f4或f | 标准单精度浮点数;兼容C语言float |
float64 | f8或d | 标准双精度浮点数;兼容C语言double和Python float |
float128 | f16或g | 拓展精度浮点数 |
complex64,complex128,complex256 | c8,c16,c32 | 分别基于32位、64位、128位浮点数的复数 |
bool | ? | 布尔值,存储True或False |
object | o | Python object类型 |
string_ | S | 修正的ASCII字符串类型;例如生成一个长度为10的字符串类型,使用'S10' |
unicode_ | U | 修正的Unicode类型,生成一个长度为10的Unicode类型,使用'U10' |
astype方法---显示地转换数组的数据类型
注意:使用astype时总是生成一个新的数组,即使传入的dtype与之前一样。
(三)NumPy数组算术
1、向量化:批量操作而无须任何for循环
2、等尺寸数组---逐元素操作
①标量计算---会把计算参数传递给数组的每一个元素
②比较---产生一个布尔值数组
3、不同尺寸数组的操作---广播特性(了解)
(四)基础索引与切片
1、索引
①区别于python的内建列表,数组的切片是原数组的视图---数据并不是被复制了,任何对于视图的修改都会反映到原数组上。
例1:arr([0,1,2,3,4,5])
arr[2:4]=12
arr([0,1,12,12,12,5])
例2:arr_slice=arr[2:4]
arr_slice[1]=12345
arr([0,1,12,12345,12,5])
注意:[:]将会引用数组的所有值;显示的复制数组---arr[2:4].copy()
②二维数组,可以传递一个索引的逗号分隔列表去选择单个元素
arr2d[0][2]相当于arr2d[0,2]
③多维数组,省略后续索引值,返回的对象将是降低一个维度的数组
例:2×2×3的数组 arr3d(
[[[1, 2, 3]
[4, 5, 6]]
[[7, 8, 9]
[10, 11, 12]]]
)
arr3d[0]是一个2×3的数组 arr3d[0](
[[1, 2, 3]
[4, 5, 6]]
)
标量和数组都可以传递给arr3d[0]---arr3d[0]=42、arr3d[0]=arr([[1 2 3][4 5 6]])
④数组的切片索引
将索引和切片混合,得到降低纬度的切片
例:arr2d=arr([[1 2 3][4 5 6][7 8 9]])
arr2d[1,:2]---arr([4,5])
arr2d[:2,2]---arr([3,6])
注意:单独一个冒号表示选择整个轴上的数组 arr2d[:,:1]---arr([1],[4],[7])
(五)布尔索引
使用pandas更方便
(六)神奇索引
神奇索引---用于描述使用整数数组进行数据索引