结合着: numpy常用矩阵计算函数总结
>>>import numpy as np
# 创建数组
# np.array([(中填入想要创建的数组,若多维则将每一维用括号括起来,括号之间用,相隔])
>>>np.array([(1.0,2,3),(3,4,5)])
[out]array([[ 1., 2., 3.],
[ 3., 4., 5.]])
>>>np.arange(1,20,4)
[out]array([ 1, 5, 9, 13, 17])
>>>np.linspace(0,2,9) # 两位小数,小数位数不足两位时用空格补全
[out]array([ 0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])
>>>np.zeros((1,2)) # 1行2列0
>>>np.ones((1,2))# 1行2列1
>>>np.random.random((5,5))# 5行5列随机数(0-1)
>>>np.empty((2,2))# 1行2列0.
>>>arr1 = np.random.random((5,4))
>>>print 'shape: %s, length: %s, dimention:%s, size: %s, data type: %s' % (arr1.shape,len(arr1),arr1.ndim,arr1.size,arr1.dtype)
[out]shape: (5L, 4L), length: 5, dimention:2, size: 20, data type: float64
>>>arr1.astype(int)
>>>print type(arr1),'\n'
>>>arr2 = np.copy(arr1)
>>>other = arr1.copy()
>>>arr1.sort() # 默认axis=0,即按照行从小到大排列
>>>print arr1,'\n'
>>>arr1.sort(axis=1) # 将每一列按照从小到大排序
>>>print arr1
[out]
<type 'numpy.ndarray'>
[[ 0.03890902 0.14826119 0.16275598 0.67276205]
[ 0.13559738 0.19002854 0.52015957 0.68160368]
[ 0.1879642 0.38801809 0.58606979 0.69546223]
[ 0.39901827 0.44439364 0.64573481 0.76457091]
[ 0.46092613 0.51445446 0.65365999 0.7692214 ]]
[[ 0.03890902 0.14826119 0.16275598 0.67276205]
[ 0.13559738 0.19002854 0.52015957 0.68160368]
[ 0.1879642 0.38801809 0.58606979 0.69546223]
[ 0.39901827 0.44439364 0.64573481 0.76457091]
[ 0.46092613 0.51445446 0.65365999 0.7692214 ]]
>>>print arr1,'\n',arr2
>>>arr3 = np.append(arr1,arr2) # 将arr1 和 arr2逐行顺次连接并转化为一个数组
>>>print arr3,arr3.ndim
>>>print '------------------------111-----------------------------------------------'
>>>arr4 = np.insert(arr1, 1, (2,3,4,5,6),axis = 1) # 将第一列换成(2,3,4,5),原数组并没有改变
>>>print arr4
>>>print '-------------------------222----------------------------------------------'
>>>arr3.resize((4,arr3.size/4)) # 第一个参数是列数
>>>print arr3
>>>arr5 = np.delete(arr3,(1,2),0) # np.delete(array,(1,2),axis),按照axis=0横坐标,删除第1,2行,同时原数组并没有发生改变
>>>print '-------------------------333----------------------------------------------'
>>>print arr5
[out]
[[ 0.03890902 0.14826119 0.16275598 0.67276205]
[ 0.13559738 0.19002854 0.52015957 0.68160368]
[ 0.1879642 0.38801809 0.58606979 0.69546223]
[ 0.39901827 0.44439364 0.64573481 0.76457091]
[ 0.46092613 0.51445446 0.65365999 0.7692214 ]]
[[ 0.03890902 0.14826119 0.16275598 0.67276205]
[ 0.13559738 0.19002854 0.52015957 0.68160368]
[ 0.1879642 0.38801809 0.58606979 0.69546223]
[ 0.39901827 0.44439364 0.64573481 0.76457091]
[ 0.46092613 0.51445446 0.65365999 0.7692214 ]]
[ 0.03890902 0.14826119 0.16275598 0.67276205 0.13559738 0.19002854
0.52015957 0.68160368 0.1879642 0.38801809 0.58606979 0.69546223
0.39901827 0.44439364 0.64573481 0.76457091 0.46092613 0.51445446
0.65365999 0.7692214 0.03890902 0.14826119 0.16275598 0.67276205
0.13559738 0.19002854 0.52015957 0.68160368 0.1879642 0.38801809
0.58606979 0.69546223 0.39901827 0.44439364 0.64573481 0.76457091
0.46092613 0.51445446 0.65365999 0.7692214 ] 1
------------------------111-----------------------------------------------
[[ 0.03890902 2. 0.14826119 0.16275598 0.67276205]
[ 0.13559738 3. 0.19002854 0.52015957 0.68160368]
[ 0.1879642 4. 0.38801809 0.58606979 0.69546223]
[ 0.39901827 5. 0.44439364 0.64573481 0.76457091]
[ 0.46092613 6. 0.51445446 0.65365999 0.7692214 ]]
-------------------------222----------------------------------------------
[[ 0.03890902 0.14826119 0.16275598 0.67276205 0.13559738 0.19002854
0.52015957 0.68160368 0.1879642 0.38801809]
[ 0.58606979 0.69546223 0.39901827 0.44439364 0.64573481 0.76457091
0.46092613 0.51445446 0.65365999 0.7692214 ]
[ 0.03890902 0.14826119 0.16275598 0.67276205 0.13559738 0.19002854
0.52015957 0.68160368 0.1879642 0.38801809]
[ 0.58606979 0.69546223 0.39901827 0.44439364 0.64573481 0.76457091
0.46092613 0.51445446 0.65365999 0.7692214 ]]
-------------------------333----------------------------------------------
[[ 0.03890902 0.14826119 0.16275598 0.67276205 0.13559738 0.19002854
0.52015957 0.68160368 0.1879642 0.38801809]
[ 0.58606979 0.69546223 0.39901827 0.44439364 0.64573481 0.76457091
0.46092613 0.51445446 0.65365999 0.7692214 ]]
-------------------------444----------------------------------------------
[[ 0.03890902 0.14826119 0.16275598 0.67276205 0.03890902 0.14826119
0.16275598 0.67276205]
[ 0.13559738 0.19002854 0.52015957 0.68160368 0.13559738 0.19002854
0.52015957 0.68160368]
[ 0.1879642 0.38801809 0.58606979 0.69546223 0.1879642 0.38801809
0.58606979 0.69546223]
[ 0.39901827 0.44439364 0.64573481 0.76457091 0.39901827 0.44439364
0.64573481 0.76457091]
[ 0.46092613 0.51445446 0.65365999 0.7692214 0.46092613 0.51445446
0.65365999 0.7692214 ]]
>>>arr3 = np.concatenate((arr1,arr2),axis=1) # 连接,此处是按照纵坐标拼到右面
>>>arr4 = np.vstack((arr1,arr2))# 连接,此处是按照横坐标拼到下面
>>>arr5 = np.hstack((arr1,arr2))# 连接,此处是按照纵坐标
>>>print arr3,'\n',arr4,'\n',arr5
[out]
[[ 0.03890902 0.14826119 0.16275598 0.67276205 0.03890902 0.14826119
0.16275598 0.67276205]
[ 0.13559738 0.19002854 0.52015957 0.68160368 0.13559738 0.19002854
0.52015957 0.68160368]
[ 0.1879642 0.38801809 0.58606979 0.69546223 0.1879642 0.38801809
0.58606979 0.69546223]
[ 0.39901827 0.44439364 0.64573481 0.76457091 0.39901827 0.44439364
0.64573481 0.76457091]
[ 0.46092613 0.51445446 0.65365999 0.7692214 0.46092613 0.51445446
0.65365999 0.7692214 ]]
[[ 0.03890902 0.14826119 0.16275598 0.67276205]
[ 0.13559738 0.19002854 0.52015957 0.68160368]
[ 0.1879642 0.38801809 0.58606979 0.69546223]
[ 0.39901827 0.44439364 0.64573481 0.76457091]
[ 0.46092613 0.51445446 0.65365999 0.7692214 ]
[ 0.03890902 0.14826119 0.16275598 0.67276205]
[ 0.13559738 0.19002854 0.52015957 0.68160368]
[ 0.1879642 0.38801809 0.58606979 0.69546223]
[ 0.39901827 0.44439364 0.64573481 0.76457091]
[ 0.46092613 0.51445446 0.65365999 0.7692214 ]]
[[ 0.03890902 0.14826119 0.16275598 0.67276205 0.03890902 0.14826119
0.16275598 0.67276205]
[ 0.13559738 0.19002854 0.52015957 0.68160368 0.13559738 0.19002854
0.52015957 0.68160368]
[ 0.1879642 0.38801809 0.58606979 0.69546223 0.1879642 0.38801809
0.58606979 0.69546223]
[ 0.39901827 0.44439364 0.64573481 0.76457091 0.39901827 0.44439364
0.64573481 0.76457091]
[ 0.46092613 0.51445446 0.65365999 0.7692214 0.46092613 0.51445446
0.65365999 0.7692214 ]]
# np.split()
>>>arr3 = np.array_split(arr1,3) # 将arr1切片成3个子array,以行为单位
>>>arr4 = np.hsplit(arr2,2) # # 将arr1切片成2个子array,以列为单位
>>>print arr3,'\n',arr4
[out]
[array([[ 0.03890902, 0.14826119, 0.16275598, 0.67276205],
[ 0.13559738, 0.19002854, 0.52015957, 0.68160368]]), array([[ 0.1879642 , 0.38801809, 0.58606979, 0.69546223],
[ 0.39901827, 0.44439364, 0.64573481, 0.76457091]]), array([[ 0.46092613, 0.51445446, 0.65365999, 0.7692214 ]])]
[array([[ 0.03890902, 0.14826119],
[ 0.13559738, 0.19002854],
[ 0.1879642 , 0.38801809],
[ 0.39901827, 0.44439364],
[ 0.46092613, 0.51445446]]), array([[ 0.16275598, 0.67276205],
[ 0.52015957, 0.68160368],
[ 0.58606979, 0.69546223],
[ 0.64573481, 0.76457091],
[ 0.65365999, 0.7692214 ]])]
>>>other =arr1.flatten() # 两维变1维
>>>print other
>>>arr3 =np.transpose(arr1)# 转置
>>>print arr3
# arr2.T # 转置
[out]
[ 0.03890902 0.14826119 0.16275598 0.67276205 0.13559738 0.19002854
0.52015957 0.68160368 0.1879642 0.38801809 0.58606979 0.69546223
0.39901827 0.44439364 0.64573481 0.76457091 0.46092613 0.51445446
0.65365999 0.7692214 ]
[[ 0.03890902 0.13559738 0.1879642 0.39901827 0.46092613]
[ 0.14826119 0.19002854 0.38801809 0.44439364 0.51445446]
[ 0.16275598 0.52015957 0.58606979 0.64573481 0.65365999]
[ 0.67276205 0.68160368 0.69546223 0.76457091 0.7692214 ]]
# 除最后一行外都是element-wise
>>>np.add(arr1,arr2)
# np.substract(arr1,arr2)
>>>np.multiply(arr1,arr2)
>>>np.sqrt(arr1)
>>>np.sin(arr1)
>>>np.cos(arr1)
>>>np.log(arr1)
>>>np.dot(arr1,arr2.T) # 矩阵点乘
[out]
array([[ 0.50259357, 0.57666598, 0.62810848, 0.70088323, 0.71809785],
[ 0.57666598, 0.78964704, 0.87810138, 0.99557278, 1.02457303],
[ 0.62810848, 0.87810138, 1.01303409, 1.15760977, 1.20431004],
[ 0.70088323, 0.99557278, 1.15760977, 1.3582434 , 1.42275354],
[ 0.71809785, 1.02457303, 1.20431004, 1.42275354, 1.49608922]])
# 针对整个数组来说的,若为2维,可以指定横纵坐标
>>>arr1.mean()
>>>np.mean(arr1)
>>>np.median(arr1)
>>>arr1.std()
>>>np.corrcoef(arr1)
[out]
array([[ 1. , 0.83441978, 0.80433431, 0.85376926, 0.88596079],
[ 0.83441978, 1. , 0.95796309, 0.99918037, 0.99289522],
[ 0.80433431, 0.95796309, 1. , 0.96261479, 0.96853792],
[ 0.85376926, 0.99918037, 0.96261479, 1. , 0.99689283],
[ 0.88596079, 0.99289522, 0.96853792, 0.99689283, 1. ]])
>>>arr1.sum() # Array-wise
>>>arr1.min() # Array-wise
>>>arr1.max(axis=0)
>>>arr1.cumsum(axis=0) # 第n行是前n行的累加和
[out]
array([[ 0.03890902, 0.14826119, 0.16275598, 0.67276205],
[ 0.1745064 , 0.33828973, 0.68291554, 1.35436572],
[ 0.3624706 , 0.72630782, 1.26898533, 2.04982795],
[ 0.76148887, 1.17070146, 1.91472014, 2.81439886],
[ 1.22241499, 1.68515591, 2.56838013, 3.58362025]])
# Tricks
# Index trick when working with two np-arrays
>>>a = np.array([1,2,3,6,1,4,1])
>>>b = np.array([5,6,7,8,3,1,2])
# Only saves a at index where b == 1
>>>other_a = a[b == 1]
#Saves every spot in a except at index where b != 1
>>>other_other_a = a[b != 1]
>>>x = np.array([4,6,8,1,2,6,9])
>>>y = x > 5
>>>print x[y]
# Even shorter
>>>x = np.array([1, 2, 3, 4, 4, 35, 212, 5, 5, 6])
>>>print x[x < 5]