Numpy
1.创建ndarray
ndarray指的是n维数组
array01 = numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
# ndmin最小维度
a = np.array([1, 2, 3, 4, 5], ndmin = 2)
a [[1, 2, 3, 4, 5]]
参数 | 说明 |
object |
数组对象可以是list,也可以是array |
dtype |
数据的类型,有np.int8,np.string_等 |
copy |
对象是否需要拷贝 |
order |
创建数据的样式,“C”为行方向,“F”为列方向,"A"为任意方向 |
subok |
默认返回与基本数据类型一致的数组 |
ndmin |
指定生成数组的最小维度 |
2. 数据类型
import numpy as np
np.int8、np.int16 ...np.int64 节省空间
np.bool_ 布尔类型
np.float_
np.object_
3.数组属性
数组应当有维度,大小,类型等
array.ndim 指的是几维度
array.shape 几行几列的
array.size 元素的个数
array.dtype 元素数据类型
array.flat 数组的转置
4.数组的创建
4.1 np.zeros
numpy.zeros(shape, dtype = float, order = 'C')
生成全是0的数组
4.2 np.ones
numpy.ones(shape, dtype = None, order = 'C')
生成全是1的数组,shape指定形状
4.3 np.arange
numpy.arange(start, stop, step, dtype)
和range相似,生成维度是一的
5.数组索引相关
5.1 整数数组索引
arr01 = np.array([[1,2], [3, 4], [5, 6]])
arro2 = arr01[[0,1,2], [0,1,0]]
print (arro2) 取(0,0)、(1,1)、(2,0)放在一个一维的数组中
arr03 = arr01[[[1,1],[0,0]],[[1,1],[1,1]]]
# [[1,1],[0,0]] 二行二列的索引,生成的也是二行二列,
arr04 = arr01[[[[1],[1]],[[1],[1]]],[[[1],[1]],[[1],[1]]]]
# [[[1],[1]],[[1],[1]]] 2页2行一列的数组
5.2 布尔索引
arr01 = np.array([[1,2], [3, 4], [5, 6]])
# 取出大于3的
arr02 = arr01[arr01>3]
5.3 花式索引
花式索引根据索引数组的值作为目标数组的某个轴的下标来取值。对于使用一维整型数组作为索引,如果目标是一维数组,那么索引的结果就是对应下标的行,如果目标是二维数组,那么就是对应位置的行元素。花式索引跟切片不一样,它总是将数据复制到新数组中。import numpy as np x=np.arange(32).reshape((8,4))print (x[np.ix_([1,5,7,2],[0,3,1,2])])np.ix_([1,5,7,2],[0,3,1,2]) # 笛卡尔积
6 广播机制
6.1 shape一样
shape一样,对位相运算
6.2 shape不一样
1. [[1,2,3],[4,5,6]] + [1,2,3]2. [[1,2,3],[4,5,6]] + [[1],[2]]要么列数一样,要么行数一样,但要都是一行或者一列的
7 遍历迭代
数组有几行几列,可以像list一样遍历1.for x in np.nditer(a, order='F'):Fortran order,即是列序优先;2.for x in np.nditer(a.T, order='C'):C order,即是行序优先;3. for i in arr.flat4.广播迭代a = [[1,2,3],[1,2,3]]b = [2,3,4]for x,y in np.nditer([a,b]): print ("%d:%d" % (x,y), end=", " )
8.数组操作
8.1修改数组的形状
函数 | |
reshape |
和原来的数据没有关系,原来的没有被改变 |
flat |
转成一维的 |
flatten |
ndarray.flatten(order='C') 'C' -- 按行,'F' -- 按列,'A' -- 原顺序,'K' -- 元素在内存中的出现顺序。 |
8.2 翻转数组
np.tarnspose(arr,axes)np.transpose(arr01,axes=(1,0))axes 原来对应 0,1现在对应 1,0 意味着 原来的行变成列,列变成行
8.3连接数组
函数 | |
concatenate |
函数用于沿指定轴连接相同形状的两个或多个数组 |
stack |
函数用于沿新轴连接数组序列 axis 为0 以行 |
hstack |
水平堆叠 |
vstack |
垂直堆叠 |
1. concatenatea = np.array([[1, 2], [3, 4]])b = np.array([[5,],[ 6]])concatente(a,b,axis=1)c = np.array([[1,2]])concatente(a,b,axis=0)2. stacka = np.array([[1,2],[3,4]])b = np.array([[5,6],[7,8]])print (np.stack((a,b),0))print (np.stack((a,b),1)) # 三维的
8.4 数组切分
函数 | 数组操作 |
split |
将一个数组分割为多个子数组 |
b = np.split(a,3)b = np.split(a,[4,7]) # 0 到 4 5到7 8到---
8.5 数组元素删除和添加
函数 | 元素及描述 |
resize |
返回指定形状的新数组 |
append |
将值添加到数组末尾 |
insert |
沿指定轴将值插入到指定下标之前 |
delete |
删掉某个轴的子数组,并返回删除后的新数组 |
unique |
查找数组内的唯一元素 |
clip |
修剪,小于min变成min,大于max变成max |
1. np.resize 拉平,在塑造形状2. np.append(arr, values, axis=None) 当axis=None时,返回一维 为 0和1 的时候 形状要匹配3. np.insert(arr, obj, values, axis) 当 axis = None ,拉平在添加 其他会广播 4. np.delete(arr, obj, axis) obj为整数或整数数组 axis为维度,当为0的时候,拉平 5. numpy.unique(arr, return_index, return_inverse, return_counts) return_index:如果为true,返回新列表元素在旧列表中的位置(下标),并以列表形式储 return_inverse:如果为true,返回旧列表元素在新列表中的位置(下标),并以列表形式储 return_counts:如果为true,返回去重数组中的元素在原数组中的出现次数
9 统计函数
numpy.amin() 用于计算数组中的元素沿指定轴的最小值。numpy.amax() 用于计算数组中的元素沿指定轴的最大值axis = 0 横向的最大值,也就是每列的最大值axis = 1 竖直方向最大值,就是每行的最大值numpy.median()numpy.mean() 函数返回数组中元素的算术平均值。 如果提供了轴,则沿其计算np.var([1,2,3,4]) # 方差标准差是方差的平方根
10. 排序
1. np.sort(arr,axis)axis = None 最后轴方向排序axis = 1 沿着列2. numpy.where() 函数返回输入数组中满足给定条件的元素的索引。
11. 文件读写
np.loadtxt(FILENAME, dtype=int, delimiter=' ')np.savetxt(FILENAME, a, fmt="%d", delimiter=",")a = np.array([1,2,3,4,5]) np.savetxt('out.txt',a) b = np.loadtxt('out.txt') print(b)