Numpy入门学习笔记(一)-------数据类型,数组属性,数组操作

一.Numpy简介

NumPy 即 Numerical Python,它是Python的一个扩展程序库,主要针对数组和矩阵的运算,它经常和SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用,这样可以基本代替Matlib的使用,而这一组合经常应用于机器学习和数据科学中。

二.Numpy Ndarray对象

1.ndarray指的是多维数组,存放的是同类型元素,每个元素在内存中有相同储存大小的区域,ndarray对象由计算机内连续的一部分组成,并结合索引,每个元素依次映射到内存块的一个位置中。
2.数组的参数
Numpy入门学习笔记(一)-------数据类型,数组属性,数组操作_第1张图片

三.Numpy数据类型

1.数据类型

(1)bool_	布尔型数据类型(True 或者 False)

(2)int_	    默认的整数类型(类似于 C 语言中的 long,int32 或 int64)
         intc	与 C 的 int 类型一样,一般是 int32 或 int 64
         intp	用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64)
         int8	字节(-128 to 127)
         int16	整数(-32768 to 32767)
         int32	整数(-2147483648 to 2147483647)
         int64	整数(-9223372036854775808 to 9223372036854775807)
         uint8	无符号整数(0 to 255)
         uint16	无符号整数(0 to 65535)
         uint32	无符号整数(0 to 4294967295)
         uint64	无符号整数(0 to 18446744073709551615)
         
(3)float_	        float64 类型的简写
         float16	半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位
         float32	单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位
         float64	双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位
         
(4)complex_	    complex128 类型的简写,即 128 位复数
         complex64	复数,表示双 32 位浮点数(实数部分和虚数部分)
         complex128	复数,表示双 64 位浮点数(实数部分和虚数部分)

2.数据类型对象:dtype

dt1=np.dtype(np.int32)
dt2=np.dtype('i4')         # 'i1','i2','i4','i8'分别代表int8,int16,in32,int64

#结构化数据类型:通过元组创建
例:
dt = np.dtype([('age',np.int8)]) 
a = np.array([(10,),(20,),(30,)], dtype = dt) 
print(a['age'])
输出结果为:[10 20 30]

3.内建类型的字符代码

Numpy入门学习笔记(一)-------数据类型,数组属性,数组操作_第2张图片
'S20’即代表20个字符

四.NumPy 数组属性

1.数组的维度

数组的维度称为秩,也就是轴(axis)的数量。对于二维数组来说,axis=0,即沿着第0轴(行)来进行操作,沿着行就是对每一列进行操作;同理,axis=1意味着对每一行进行操作。

相关函数

np.apply_along_axis(函数,轴向,高维数组)  #沿某个轴对数组使用函数

2.数组的属性:

Numpy入门学习笔记(一)-------数据类型,数组属性,数组操作_第3张图片

五.数组操作

1.修改数组形状

#参数order order为可选参数(C:按行方向,F:按列方向,A:按照原顺序,K:按照元素在内存中的数据)

a.reshape(newshape, order)
a.shape=(newshape)
a.resize()
          
a.flat                         #生成一个数组元素迭代器
a.flatten(order)               #生成一份拷贝的数组,形状是一维
a.ravel(order)                 #返回一维数组的视图,修改值后会影响原来的数据

2.翻转数组

#转置至少是2维
a.T             #转置
a.transpose(axes)    #

示例:一维数组的转置

a=np.array([1,2,3,4,5])
print(np.array([a]).T)#先转换成2维数组再进行转置
print(a.reshape(-1,1)) #重新定义形状,让它变成只有一列

3.连接数组

np.concatenate((a1,a2,...),axis=0) ##数组要求维度相同,且除了axis轴外其他方向上的形状相同
np.stack((a1,a2,...),axis=0)
np.hstack((a1,a2,...))#水平堆叠
np.vstack((a1,a2,...))#竖直堆叠

np.row_stack((a1,a2,...))/np.r_[a1,a2,...]#将行堆叠
np.column_stack((a1,a2,...))/np.c_[a1,a2,...]#将列堆叠

注意:一维情况

a=np.array([1,2,3])
b=np.array([7,8,9])
print(np.vstack((a,b)))
#结果是[[1 2 3]
       [7 8 9]]
print(np.r_[a,b])
#结果是[1 2 3 7 8 9]
print(np.hstack((a,b)))
#结果是[1 2 3 7 8 9]
print(np.c_[a,b])
#结果是[[1 7]
       [2 8]
       [3 9]]

4.分割数组

np.split(a,indices/nums,axis)  #将数组沿着某个轴切分,按照切片或者平均分成几组
np.hsplit(a,indices/nums)#水平切分
np.vsplit(a,indices/nums)#竖直切分

np.dsplit(a,nums)#适用于三维及以上,将二维数组由前至后排列,用一个水平面依次截,得到的某一层元素组成一个数组

5.数组元素的添加与删除

np.append(a, values, axis)#沿某个轴添加元素

np.insert(a,obj,values,axis)
#obj为在该值前插入的索引
#如果没有设置axis,那么插入时会展开,如果设置了axis,则直接插入,必要时会自动广播
np.delete(a,obj,axis)#规则同insert函数

6.数组的集合运算

Numpy入门学习笔记(一)-------数据类型,数组属性,数组操作_第4张图片

np.unique(a, return_index, return_inverse, return_counts)
#return_index:如果为true,返回新列表元素在旧列表中的位置(下标),并以列表形式储
#return_inverse:如果为true,返回旧列表元素在新列表中的位置(下标),并以列表形式储
#return_counts:如果为true,返回去重数组中的元素在原数组中的出现次数

7.裁剪压缩和累乘

ndarray.clip(min,max)#将数组中小于x的数设置为min,将数组中大于max的数设置为max
ndarray.compress(条件)#返回调用数组中满足给定条件的元素
ndarray.prod()#返回调用数组中各元素的乘积
ndarray.cumprod()#返回调用数组中各元素计算累乘的过程数组

六.迭代数组

1.生成迭代数组

np.nditer(a,order)

2.修改数组中元素的值

np.nditer(a,op_flags=['readwrite'])# 默认情况下为只读模式,将op_flags改为readwrite或者write-only,即可进行操作

3.使用外部循环

np.nditer(a,flags=['external_loop'],oder='F')#给出的值是具有多个值的一维数组,按列组合

你可能感兴趣的:(python,numpy)