python numpy 的一些学习总结
来源于:
http://nbviewer.jupyter.org/gist/manujeevanprakash/7e47301f0b50a98232ca
创建数组
np.array(list)
dim #维度
shape #形状
dtype #数据类型
创建1维数组里面全是0
np.zeros(x)
创建多维数组里面全是0
np.zeros((x, y))
创建1维数组从0~x-1
np.arange(15)
返回单位矩阵的数组
np.eye(x)
数组的运算:
A*B 数组里的元素按位置一一对应相乘
A-B数组里的元素按位置一一对应相减
…..
定位元素:
arr[5]:选取下标为5的元素即第六位元素
arr[4:9]:选取下标4~8的元素即第5~9位元素,左开右闭
arr[:]:全选
arr[1] = 123456:更改取值
多维array的元素的定位:
matrix_arr[0][2]或matrix_arr[0,2]:第一行的第三列
arr[0, 1, 2]:第一层的第二行的第三列
赋值:
copied_values = three_d_arr[0].copy()
three_d_arr[0] = 99
three_d_arr[0] = copied_values
切片:
matrix_arr_1[:2] 切割前面两行
matrix_arr_1[:1,1:] 切割第一行的后两列
matrix_arr_1[1,:2] 切割第二行的前两列
matrix_arr_1[:,2:] 返回所有行后第三列
matrix_arr_1[[0,2]] 返回第一和第三行
通过布尔值返回指定的元素
personals = np.array([‘Manu’, ‘Jeevan’, ‘Prakash’, ‘Manu’, ‘Prakash’, ‘Jeevan’, ‘Prakash’])
random_no = random.randn(7, 4)
random_no_1 = random_no[personals == ‘Manu’] #切割第一和第四行;第一第四行返回TRUE
random_no_2 = random_no[personals == ‘Manu’, 2:] #切割第一和第四行的第三四列
print(personals != ‘Manu’) #除了第三四行
random_no_4 = random_no[(personals == ‘Manu’) | (personals == ‘Jeevan’)] #切割第1246行
综合操作
- algebra = random.randn(7, 4) #生成一个7行4列的随机数组
for j in range(7):
algebra[j] = j #分别对1-7行赋值0-6
algebra[[4, 5, 1]] #选取5 6 2行
- fancy = np.arange(36).reshape(9, 4) #生成9行4列36元素从0~35的数组
fancy_1=fancy[[4, 3, 2, 1],[3, 2, 2, 2]] #列表截取指定元素重新组成一个数组
fancy_2=fancy[[1, 4, 8, 2]][:, [0, 3, 1, 2]] #列表截取指定行,重新安排列的位置
fancy_3=fancy[[1, 4, 8, 2]] #列表截取指定行
fancy_4=fancy[np.ix_([1,4,8,2],[0,3,1,2])] #用np.ix function截取指定行,重新安排列的位置
数组的矩阵操作
transpose = np.arange(12).reshape(3, 4)
transpose.T #转置
y.dot(x) #两矩阵相乘
np.dot(y, x) #两矩阵相乘
from numpy.linalg import inv,qr
x.T.dot(x) #乘自己的转置矩阵
inv(x) #逆矩阵
q, r = qr(sp) #QR奇异值分解
函数功能:
np.sqrt() #对数组内每个元素开平方根
np.exp() #对数组内每个元素返回以e为底的对数
np.maximum(x, y) #返回两数组中对应位置元素的最大值组成一个新的数组
np.modf() # 将数组各元素的小数和整数部分以两个独立数组形式返回
np.abs() #绝对值
Data processing using Arrays
-
mtrices = np.arange(-5, 5, 1)
x, y = np.meshgrid(mtrices, mtrices) #x对-5~4按行重复,y对-5~4按列重复 -
x1 = np.array([1, 2, 3, 4, 5])
y1 = np.array([6, 7, 8, 9, 10])
cond = [True, False, True, True, False]
z1 = [(x, y, z) for x, y, z in zip(x1, y1, cond)] #结合
np.where(cond, x1, y1) #True返回第一个,false返回第二个
np.where(判断, True返回的内容, False返回的内容)
统计类
x.mean()
或者
np.mean(x) #求平均
x.sum() #求和
np.sum(x, axis=0) #多维数组列求和
x.sum(0)#多维数组列求和
np.sum(x, axis=1) #多维数组行求和
x.sum(1)#多维数组行求和
x.cumsum(0) #多维数组按列累加求和
x.cumsum(0) #多维数组按行累加求和
(xp > 0).sum() #对大于0的数求和
x = np.array([True, False, True, False, True, False])
x.any() #判断是否有True
x.all() #判断是否全为false
tp.sort() #多维数组,0按列排序,1按行排序
np.unique(x) #筛选重复值
set(x) #筛选重复值
np.in1d(x,[‘Manu’]) #判断对应位置是否有该元素
np.ones(10, dtype=np.int) #dtype规定字符类型