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)

 

永远不要高估自己