numpy库是数据分析的基础包,提供高性能的数组与矩阵运算处理能力;
优点:
1.Numpy的强大之处-向量化操作;
2.NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵;
3.Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix));
4.ndarray在存储数据的时候,数据与数据的地址都是连续的,这样就给使得批量操作数组元素时速度更快;
# 一:创建数组
In [1 ]:
import numpy as np
data1 = [5, 7, 9, 20] #列表
arr1 = np.array(data1)arr1
In [3]:
data2 = (5, 7, 9, 20) #元组
arr2 = np.array(data2)
arr2
Out[3]:
array([ 5, 7, 9, 20])
In [4]:
data3 = [[1, 2, 3, 4],[5, 6, 7, 8]] #多维数组
arr3 = np.array(data3)
arr3
Out[4]:
array([[1, 2, 3, 4], [5, 6, 7, 8]])
In [5]:
arr3.shape #查看组的维度 两行四列
Out[5]:
(2, 4)
In [6]:
arr3.dtype #查看数据类型
Out[6]:
dtype('int32')
In [7]:
data4 = [1.2, 2, 3.45, 5]
arr4 = np.array(data4)
arr4
Out[7]:
array([ 1.2 , 2. , 3.45, 5. ])
In [8]:
arr4.dtype
Out[8]:
dtype('float64')
In [9]:
np.zeros(8) #通过zeros()方法创建全为零的数组
Out[9]:
array([ 0., 0., 0., 0., 0., 0., 0., 0.])
In [10]:
np.zeros((3,4))
Out[10]:
array([[ 0., 0., 0., 0.], [ 0., 0., 0., 0.], [ 0., 0., 0., 0.]])
In [11]:
np.ones(4) #通过ones()方法创建全为1的数组
Out[11]:
array([ 1., 1., 1., 1.])
In [12]:
np.ones((4,6))
Out[12]:
array([[ 1., 1., 1., 1., 1., 1.], [ 1., 1., 1., 1., 1., 1.], [ 1., 1., 1., 1., 1., 1.], [ 1., 1., 1., 1., 1., 1.]])
In [13]:
np.empty((2, 2, 2)) #创建没有具体值的数组(即为垃圾值的数组)
Out[13]:
array([[[ 8.25089629e-322, 2.39127773e-321], [ 2.47032823e-323, 3.90344271e-316]], [[ 0.00000000e+000, 2.47032823e-323], [ 3.90350911e-316, 0.00000000e+000]]])
In [14]:
np.arange(10) #arange()函数用于创建数组
Out[14]:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [15]:
arr3
Out[15]:
array([[1, 2, 3, 4], [5, 6, 7, 8]])
In [17]:
arr5 = np.ones_like(arr3)#通过ones_like()方法中传入的数组形式创建全为1的数组
arr5
Out[17]:
array([[1, 1, 1, 1], [1, 1, 1, 1]])
In [18]:
arr5.dtype
Out[18]:
dtype('int32')
In [19]:
data = [[2, 4, 5],[3,5, 7]]
arr = np.array(data)
arr
Out[19]:
array([[2, 4, 5], [3, 5, 7]])
# 二:数组的属性:
In [20]:
arr.ndim #.ndim为秩即数据轴的个数
Out[20]:
2
In [21]:
arr.size #.元素的总个数
Out[21]:
6
In [22]:
arr.itemsize #数组中每个元素的字节大小
Out[22]:
4
In [23]:
arr.dtype #数据类型
Out[23]:
dtype('int32')
# 三:数组类型与变换
In [26]:
arr1 = np.arange(5)
arr1
Out[26]:
array([0, 1, 2, 3, 4])
In [27]:
arr1.dtype
Out[27]:
dtype('int32')
In [28]:
arr2 = np.arange(5,dtype='float64')#数据类型强制定义
arr2
Out[28]:
array([ 0., 1., 2., 3., 4.])
In [29]:
arr2.dtype
Out[29]:
dtype('float64')
In [31]:
arr1 = np.arange(6)
arr1
Out[31]:
array([0, 1, 2, 3, 4, 5])
In [32]:
arr1.dtype
Out[32]:
dtype('int32')
In [33]:
arr2 = arr1.astype(np.float64)#astype()方法,数据类型强制转换
arr2
Out[33]:
array([ 0., 1., 2., 3., 4., 5.])
In [34]:
arr2.dtype
Out[34]:
dtype('float64')
In [35]:
arr3 = arr1.astype('string_')#astype()方法,数据类型强制转为字符串
arr3
Out[35]:
array([b'0', b'1', b'2', b'3', b'4', b'5'], dtype='|S11')
In [36]:
arr3.dtype
Out[36]:
dtype('S11')
In [38]:
arr = np.array([2.3, 7.5, 5.6, 9.8])
arr
Out[38]:
array([ 2.3, 7.5, 5.6, 9.8])
In [39]:
arr.astype('int32')
Out[39]:
array([2, 7, 5, 9])
In [40]:
arr3
Out[40]:
array([b'0', b'1', b'2', b'3', b'4', b'5'], dtype='|S11')
In [42]:
arr3.astype(np.int32)
Out[42]:
array([0, 1, 2, 3, 4, 5])
In [43]:
arr = np.array(['2', 'hello'])
arr
Out[43]:
array(['2', 'hello'], dtype='<U5')
In [44]:
arr.astype('int32')#字符串转int类型报错
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-44-849446cb6004> in <module>() ----> 1 arr.astype('int32') ValueError: invalid literal for int() with base 10: 'hello'
In [45]:
arr1 = np.arange(10)
arr1.dtype
Out[45]:
dtype('int32')
In [46]:
arr2 = np.ones(5)
arr2.dtype
Out[46]:
dtype('float64')
In [47]:
arr3 = arr1.astype(arr2.dtype)
arr3.dtype
Out[47]:
dtype('float64')
In [48]:
arr = np.arange(3)
arr.dtype
Out[48]:
dtype('int32')
In [49]:
arr.astype('float64')
Out[49]:
array([ 0., 1., 2.])
In [50]:
arr
Out[50]:
array([0, 1, 2])
# 四.数据重塑合并
In [51]:
arr = np.arange(9)
arr
Out[51]:
array([0, 1, 2, 3, 4, 5, 6, 7, 8])
In [52]:
arr.reshape((3,3))#通过reshape()方法改变其数组维度,传入的参数为新维度的元组
Out[52]:
array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
In [54]:
arr = np.array([[3, 4, 5],[1, 2, 3]])
arr.reshape((3,2))
Out[54]:
array([[3, 4], [5, 1], [2, 3]])
In [55]:
arr = np.arange(12)
arr.reshape((3,-1))#参数为-1表示数组的维度可以通过数据本身来判断
Out[55]:
array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])
In [57]:
arr = np.arange(10).reshape((5,2))
arr
Out[57]:
array([[0, 1], [2, 3], [4, 5], [6, 7], [8, 9]])
In [58]:
arr.ravel()#ravel()方法和reshape()方法相反,即将数据散开
Out[58]:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [59]:
arr
Out[59]:
array([[0, 1], [2, 3], [4, 5], [6, 7], [8, 9]])
In [60]:
arr.flatten()#flatten()方法将数据扁平化
Out[60]:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [61]:
arr
Out[61]:
array([[0, 1], [2, 3], [4, 5], [6, 7], [8, 9]])
In [62]:
arr1 = np.arange(12).reshape(3,4)
arr1
Out[62]:
array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])
In [70]:
arr2 = np.arange(12,24).reshape(3,4)
arr2
Out[70]:
array([[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]])
In [71]:
np.concatenate([arr1, arr2],axis=0)
#concatenate()方法将数组合并,指定轴方向
Out[71]:
array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11], [12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]])
In [72]:
np.concatenate([arr1, arr2],axis=1)
Out[72]:
array([[ 0, 1, 2, 3, 12, 13, 14, 15], [ 4, 5, 6, 7, 16, 17, 18, 19], [ 8, 9, 10, 11, 20, 21, 22, 23]])
In [73]:
np.vstack((arr1,arr2))#vstack()方法将数组合并
Out[73]:
array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11], [12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]])
In [74]:
np.hstack((arr1, arr2))#hstack()方法将数组合并
Out[74]:
array([[ 0, 1, 2, 3, 12, 13, 14, 15], [ 4, 5, 6, 7, 16, 17, 18, 19], [ 8, 9, 10, 11, 20, 21, 22, 23]])
In [76]:
arr = np.arange(12).reshape((6,2))
arr
Out[76]:
array([[ 0, 1], [ 2, 3], [ 4, 5], [ 6, 7], [ 8, 9], [10, 11]])
In [77]:
np.split(arr,[2, 4])#split()方法将数组拆分成多个数组
Out[77]:
[array([[0, 1], [2, 3]]), array([[4, 5], [6, 7]]), array([[ 8, 9], [10, 11]])]
In [78]:
arr = np.arange(12).reshape(3,4)
arr
Out[78]:
array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])
In [79]:
arr.transpose((1,0))
#transpose()方法或者利用属性T将数组转置;
#transpose()需要传入轴编号组成的元组;
Out[79]:
array([[ 0, 4, 8], [ 1, 5, 9], [ 2, 6, 10], [ 3, 7, 11]])
In [80]:
arr.T
Out[80]:
array([[ 0, 4, 8], [ 1, 5, 9], [ 2, 6, 10], [ 3, 7, 11]])
In [81]:
arr = np.arange(16).reshape((2, 2, 4))
arr
Out[81]:
array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7]], [[ 8, 9, 10, 11], [12, 13, 14, 15]]])
In [82]:
arr.swapaxes(1, 2)#ndarry的swapaxes()方法用于轴对换;
Out[82]:
array([[[ 0, 4], [ 1, 5], [ 2, 6], [ 3, 7]], [[ 8, 12], [ 9, 13], [10, 14], [11, 15]]])
# 五.随机数
In [85]:
arr = np.random.randint(100, 200, size=(5, 4))
arr
#np.random模块中利用randint()方法随机整数 5行4列
Out[85]:
array([[168, 180, 142, 134], [100, 106, 107, 147], [125, 170, 117, 192], [194, 172, 173, 102], [171, 171, 193, 180]])
In [87]:
arr = np.random.randn(2, 3, 5)
arr
#利用randn()方法产生随机数为平均值为0,标准差为1的正态分布随机数;
Out[87]:
array([[[-0.23022075, -1.53376604, -1.20506611, -0.72058013, 1.69808677], [-1.62102742, -1.1053548 , 0.76182009, -1.24876097, -1.55001938], [ 0.04078704, 1.96669076, -2.24999391, -1.08302149, 0.52640131]], [[ 0.09381983, 1.16288913, -0.15885707, 0.93718335, -0.72444705], [-1.68017525, -0.18660456, 0.01881962, 0.16711124, -1.60857221], [ 0.93210884, -0.26899384, -0.35037258, -0.404521 , 1.07034161]]])
In [88]:
arr = np.random.normal(4, 5, size=(3,5))
arr
#利用normal()函数可指定产生随机数的平均值和标准差的正态分布数组
Out[88]:
array([[ 8.29188165, -6.11855239, -1.5724349 , 6.97515202, 3.83049015], [ 2.23989149, 7.81287044, -10.01907046, 3.68896253, 3.01140917], [ 10.68983039, 7.63279875, 10.70678635, 2.66406148, 3.76512045]])
In [89]:
arr = np.random.randint(100, 200, size=(5, 4))
arr
Out[89]:
array([[147, 122, 130, 169], [151, 152, 117, 119], [129, 140, 111, 131], [197, 126, 176, 199], [128, 174, 117, 143]])
In [90]:
np.random.permutation(arr)#对序列排序
Out[90]:
array([[151, 152, 117, 119], [197, 126, 176, 199], [128, 174, 117, 143], [147, 122, 130, 169], [129, 140, 111, 131]])
In [91]:
arr
Out[91]:
array([[147, 122, 130, 169], [151, 152, 117, 119], [129, 140, 111, 131], [197, 126, 176, 199], [128, 174, 117, 143]])
In [92]:
arr = np.random.randint(100, 200, size=(5, 4))
arr
Out[92]:
array([[196, 140, 199, 182], [161, 109, 193, 176], [102, 138, 165, 166], [191, 181, 108, 113], [168, 102, 199, 150]])
In [93]:
np.random.shuffle(arr)#对序列排序
In [94]:
arr
Out[94]:
array([[168, 102, 199, 150], [191, 181, 108, 113], [102, 138, 165, 166], [161, 109, 193, 176], [196, 140, 199, 182]])
# 六.索引和切片
In [1]:
import numpy as np
#数组的切片和索引返回都是原始数组的使徒
In [15]:
arr = np.arange(10)
arr
Out[15]:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [16]:
arr[3]
Out[16]:
3
In [17]:
arr[-1]
Out[17]:
9
In [18]:
arr[2] = 123
arr
Out[18]:
array([ 0, 1, 123, 3, 4, 5, 6, 7, 8, 9])
In [19]:
arr
Out[19]:
array([ 0, 1, 123, 3, 4, 5, 6, 7, 8, 9])
In [20]:
arr[3] = 88
arr
Out[20]:
array([ 0, 1, 123, 88, 4, 5, 6, 7, 8, 9])
In [22]:
arr1 = arr[-3:-1]
arr1
Out[22]:
array([7, 8])
In [23]:
arr1[:] = 77
arr
Out[23]:
array([ 0, 1, 123, 88, 4, 5, 6, 77, 77, 9])
In [24]:
arr
Out[24]:
array([ 0, 1, 123, 88, 4, 5, 6, 77, 77, 9])
In [26]:
arr1 = arr[1].copy()
arr1 = 34
arr
Out[26]:
array([ 0, 1, 123, 88, 4, 5, 6, 77, 77, 9])
In [27]:
arr = np.arange(15).reshape(3,5)
arr
Out[27]:
array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14]])
In [28]:
arr[0]
Out[28]:
array([0, 1, 2, 3, 4])
In [29]:
arr[2]
Out[29]:
array([10, 11, 12, 13, 14])
In [30]:
arr
Out[30]:
array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14]])
In [31]:
arr[0][3]
Out[31]:
3
In [32]:
arr[2,3] #两种方法等价
Out[32]:
13
In [33]:
arr = np.arange(12).reshape(2,2,3)
arr
Out[33]:
array([[[ 0, 1, 2], [ 3, 4, 5]], [[ 6, 7, 8], [ 9, 10, 11]]])
In [34]:
arr[0]
Out[34]:
array([[0, 1, 2], [3, 4, 5]])
In [35]:
old = arr[0].copy()
arr[0] = 12
arr
Out[35]:
array([[[12, 12, 12], [12, 12, 12]], [[ 6, 7, 8], [ 9, 10, 11]]])
In [36]:
arr[0] = old
arr
Out[36]:
array([[[ 0, 1, 2], [ 3, 4, 5]], [[ 6, 7, 8], [ 9, 10, 11]]])
In [37]:
arr
Out[37]:
array([[[ 0, 1, 2], [ 3, 4, 5]], [[ 6, 7, 8], [ 9, 10, 11]]])
In [38]:
arr[1, 1]
Out[38]:
array([ 9, 10, 11])
In [39]:
arr[0, 1, 2]
Out[39]:
5
In [40]:
arr = np.arange(6)
arr
Out[40]:
array([0, 1, 2, 3, 4, 5])
In [41]:
arr[2:5]
Out[41]:
array([2, 3, 4])
In [42]:
arr = np.arange(12).reshape(4,3)
arr
Out[42]:
array([[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 9, 10, 11]])
In [44]:
arr[2:]
Out[44]:
array([[ 6, 7, 8], [ 9, 10, 11]])
In [45]:
arr
Out[45]:
array([[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 9, 10, 11]])
In [46]:
arr[:, 1]
Out[46]:
array([ 1, 4, 7, 10])
In [47]:
arr[:, 1:2]
Out[47]:
array([[ 1], [ 4], [ 7], [10]])
In [49]:
arr[2:, 1:]#只有使用冒号才会选取整个轴,冒号在前为列轴,冒号再后为行轴;
Out[49]:
array([[ 7, 8], [10, 11]])
In [56]:
#布尔值索引;
fruits = np.array(['apple', 'banana', 'pear', 'banana', 'pear', 'apple', 'pear'])
datas = np.random.randint(-1, 1, size=(7,5))
In [57]:
fruits
Out[57]:
array(['apple', 'banana', 'pear', 'banana', 'pear', 'apple', 'pear'], dtype='<U6')
In [58]:
datas
Out[58]:
array([[ 0, -1, 0, 0, -1], [-1, -1, 0, 0, -1], [-1, 0, -1, -1, 0], [-1, 0, 0, -1, 0], [ 0, 0, 0, 0, -1], [-1, -1, 0, 0, 0], [ 0, 0, -1, 0, -1]])
In [59]:
fruits == 'pear'
Out[59]:
array([False, False, True, False, True, False, True], dtype=bool)
In [60]:
datas[fruits == 'pear']
Out[60]:
array([[-1, 0, -1, -1, 0], [ 0, 0, 0, 0, -1], [ 0, 0, -1, 0, -1]])
In [61]:
datas[fruits != 'pear']
Out[61]:
array([[ 0, -1, 0, 0, -1], [-1, -1, 0, 0, -1], [-1, 0, 0, -1, 0], [-1, -1, 0, 0, 0]])
In [62]:
datas[(fruits == 'apple') | (fruits == 'banana')]
Out[62]:
array([[ 0, -1, 0, 0, -1], [-1, -1, 0, 0, -1], [-1, 0, 0, -1, 0], [-1, -1, 0, 0, 0]])
In [63]:
datas[fruits == 'pear',2:]
Out[63]:
array([[-1, -1, 0], [ 0, 0, -1], [-1, 0, -1]])
In [64]:
datas[fruits == 'pear',2]
Out[64]:
array([-1, 0, -1])
In [66]:
datas[datas == 0] = 1
datas
Out[66]:
array([[ 1, -1, 1, 1, -1], [-1, -1, 1, 1, -1], [-1, 1, -1, -1, 1], [-1, 1, 1, -1, 1], [ 1, 1, 1, 1, -1], [-1, -1, 1, 1, 1], [ 1, 1, -1, 1, -1]])
In [67]:
arr = np.arange(12).reshape(4,3)
arr
Out[67]:
array([[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 9, 10, 11]])
In [68]:
arr[[1, 3, 2]]#花式索引;
Out[68]:
array([[ 3, 4, 5], [ 9, 10, 11], [ 6, 7, 8]])
In [70]:
arr[[3, 2]][:, [2, 1]]
Out[70]:
array([[11, 10], [ 8, 7]])
In [71]:
arr[np.ix_([3,2],[2, 1])]#np.ix_()函数同样使用;
Out[71]:
array([[11, 10], [ 8, 7]])
# 七.数组运算
In [72]:
a = [1, 2, 3]
b = []
for i in a:
b.append(i * 10)
b
Out[72]:
[10, 20, 30]
In [73]:
arr = np.array([1, 2, 3])
arr * 10
Out[73]:
array([10, 20, 30])
In [74]:
arr * arr
Out[74]:
array([1, 4, 9])
In [75]:
arr - arr
Out[75]:
array([0, 0, 0])
In [77]:
arr = np.random.randn(3,3)
arr
Out[77]:
array([[-1.30289625, -1.62082859, -0.02086977], [ 0.61681656, 1.44215576, 1.7281482 ], [-0.96761142, 0.6475979 , -0.57524988]])
In [78]:
np.abs(arr)
Out[78]:
array([[ 1.30289625, 1.62082859, 0.02086977], [ 0.61681656, 1.44215576, 1.7281482 ], [ 0.96761142, 0.6475979 , 0.57524988]])
In [79]:
np.square(arr)#函数求平方
Out[79]:
array([[ 1.69753863e+00, 2.62708531e+00, 4.35547217e-04], [ 3.80462668e-01, 2.07981323e+00, 2.98649619e+00], [ 9.36271853e-01, 4.19383043e-01, 3.30912420e-01]])
In [82]:
arr1 = np.random.randint(1, 10, size=(5))
arr1
Out[82]:
array([5, 2, 9, 4, 1])
In [83]:
arr2 = np.random.randint(1, 10, size=(5))
arr2
Out[83]:
array([7, 6, 9, 1, 3])
In [84]:
np.add(arr1, arr2)
Out[84]:
array([12, 8, 18, 5, 4])
In [85]:
np.minimum(arr1, arr2)#minimum函数用于计算元素最小值;
Out[85]:
array([5, 2, 9, 1, 1])
In [86]:
arr = np.random.normal(2,4,size=(6,))
arr
Out[86]:
array([ 4.03156633, 2.24471147, -1.05295999, 3.17361538, 9.45900887, 2.48014303])
In [87]:
np.modf(arr)#modf()函数可返回两个数组,最小值和整数部分;
Out[87]:
(array([ 0.03156633, 0.24471147, -0.05295999, 0.17361538, 0.45900887, 0.48014303]), array([ 4., 2., -1., 3., 9., 2.]))
# 八.条件逻辑运算
In [88]:
arr1 = np.array([1, 2, 3, 4])
arr2 = np.array([5, 6, 7, 8])
cond = np.array([True, False, False, True])
In [89]:
result = [(x if c else y) for x, y, c in zip(arr1, arr2, cond)]
result
Out[89]:
[1, 6, 7, 4]
In [91]:
result = np.where(cond, arr1, arr2)
result
Out[91]:
array([1, 6, 7, 4])
In [93]:
arr = np.random.randn(4, 4)
arr
Out[93]:
array([[ 0.99483299, -0.42559031, 0.60728194, -0.28477079], [-0.47341549, -1.03284446, -1.24692688, -0.7168212 ], [-0.2463296 , 0.9006737 , -0.8362647 , 0.28860023], [ 0.24025673, -1.14644973, 0.84133157, -0.00742223]])
In [94]:
new_arr = np.where(arr > 0, 1, -1)
new_arr
Out[94]:
array([[ 1, -1, 1, -1], [-1, -1, -1, -1], [-1, 1, -1, 1], [ 1, -1, 1, -1]])
In [115]:
arr = np.random.randint(1, 300, size=(3,3))
arr
Out[115]:
array([[177, 177, 99], [238, 233, 131], [125, 288, 5]])
In [116]:
new_arr = np.where(arr > 200, 3,
np.where(arr > 100, 2, 1))
new_arr
Out[116]:
array([[2, 2, 1], [3, 3, 2], [2, 3, 1]])
# 九.统计运算
In [121]:
arr = np.random.randn(4, 4)
arr
Out[121]:
array([[-0.2460958 , -3.56262609, 2.28878812, -0.66155659], [-0.32224876, -0.62264566, 0.0759868 , -0.50014849], [ 0.38841614, 0.2260369 , -0.61771424, 0.00538855], [-0.29865896, 0.51231692, 0.48119231, 0.06256321]])
In [122]:
arr.sum()#求和
Out[122]:
-2.791005624657537
In [123]:
arr.mean()#算术平均数
Out[123]:
-0.17443785154109606
In [124]:
arr.std()#std()函数可计算标准差,var()函数可计算方差;
Out[124]:
1.1141240674492316
In [125]:
arr
Out[125]:
array([[-0.2460958 , -3.56262609, 2.28878812, -0.66155659], [-0.32224876, -0.62264566, 0.0759868 , -0.50014849], [ 0.38841614, 0.2260369 , -0.61771424, 0.00538855], [-0.29865896, 0.51231692, 0.48119231, 0.06256321]])
In [126]:
arr.mean()
#指定轴向求算术平均值
#axis=1,1代表行
#axis=0,0代表列
Out[126]:
array([ -5.45372587e-01, -3.42264027e-01, 5.31836566e-04, 1.89353371e-01])
In [127]:
arr.sum(0)#求和
Out[127]:
array([-0.47858738, -3.44691793, 2.228253 , -1.09375332])
In [128]:
arr = np.arange(9).reshape(3,3)
arr
Out[128]:
array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
In [129]:
arr.cumsum(0)#所有元素的累计和
Out[129]:
array([[ 0, 1, 2], [ 3, 5, 7], [ 9, 12, 15]], dtype=int32)
In [130]:
arr.cumprod(1)#所有元素的累计积
Out[130]:
array([[ 0, 0, 0], [ 3, 12, 60], [ 6, 42, 336]], dtype=int32)
# 十.布尔型数组运算
In [132]:
arr = np.random.randn(20)
arr
Out[132]:
array([ 0.64854453, -1.02444099, 1.18506546, 1.0588872 , -1.67297679, 1.11245385, -1.47720606, 0.67531455, 0.10707936, 1.60181681, -0.09663766, 0.13821122, 2.08949018, -0.85208144, -1.01504574, -1.01749498, 0.42782922, -0.83512655, 0.20623175, -0.23411408])
In [133]:
(arr > 0).sum()
Out[133]:
11
In [134]:
arr = np.array([True, False, False, True])
arr
Out[134]:
array([ True, False, False, True], dtype=bool)
In [135]:
arr.any()#any()函数用于测试数组中是否存在一个或多个True
Out[135]:
True
In [136]:
arr.all()#all()函数用于测试数组中是否所有值为True
Out[136]:
False
# 十一.排序
In [137]:
arr = np.random.randn(10)
arr
Out[137]:
array([-0.06763165, 0.70670621, -2.28090762, 0.61654106, 0.35562341, 0.57962632, 0.09817634, 1.52590085, 0.24640778, -0.69223728])
In [139]:
arr.sort()#通过sort()函数排序
arr
Out[139]:
array([-2.28090762, -0.69223728, -0.06763165, 0.09817634, 0.24640778, 0.35562341, 0.57962632, 0.61654106, 0.70670621, 1.52590085])
In [140]:
arr = np.random.randn(5,3)
arr
Out[140]:
array([[ 0.76464658, 1.03958729, 0.83151511], [ 1.63188956, -0.62708685, 0.05175314], [ 0.85665906, -0.24305887, 1.30020042], [ 2.00108815, -1.49244044, -0.06771401], [ 0.26482398, -1.42061605, -1.0372988 ]])
In [141]:
#对于多维数组可以指定轴方向排序
arr.sort(1)
arr
Out[141]:
array([[ 0.76464658, 0.83151511, 1.03958729], [-0.62708685, 0.05175314, 1.63188956], [-0.24305887, 0.85665906, 1.30020042], [-1.49244044, -0.06771401, 2.00108815], [-1.42061605, -1.0372988 , 0.26482398]])
In [142]:
fruits = np.array(['apple', 'banana', 'pear', 'banana', 'pear', 'apple', 'pear'])
fruits
Out[142]:
array(['apple', 'banana', 'pear', 'banana', 'pear', 'apple', 'pear'], dtype='<U6')
In [144]:
np.unique(fruits)
#唯一值运算
Out[144]:
array(['apple', 'banana', 'pear'], dtype='<U6')
In [145]:
arr = np.array([2, 3, 3, 2, 8, 1])
arr
Out[145]:
array([2, 3, 3, 2, 8, 1])
In [146]:
np.unique(arr)
Out[146]:
array([1, 2, 3, 8])
In [147]:
arr = np.array([2, 3, 5, 7])
arr
Out[147]:
array([2, 3, 5, 7])
In [148]:
np.in1d(arr, [2,7])#np.inld()函数用于测试机几个数组是否包含相同的值;
Out[148]:
array([ True, False, False, True], dtype=bool)
# 十二.数组的存取;
In [ ]:
arr = np.arange(12).reshape(4,3)
arr
In [152]:
np.savetxt('ch2ex1.csv', arr, fmt='%d',delimiter=',')#np.savetxt()对数据进行存储
In [153]:
!type ch2ex1.csv
0,1,2 3,4,5 6,7,8 9,10,11
In [155]:
arr = np.loadtxt('ch2ex1.csv', delimiter=',')#np.loadtxt对数据进行读取,并且加载到数组中;
arr
Out[155]:
array([[ 0., 1., 2.], [ 3., 4., 5.], [ 6., 7., 8.], [ 9., 10., 11.]])
# 十三.线性代数;
In [156]:
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr1
Out[156]:
array([[1, 2, 3], [4, 5, 6]])
In [157]:
arr2 = np.arange(9).reshape(3,3)
arr2
Out[157]:
array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
In [159]:
np.dot(arr1,arr2)#np.dot()矩阵乘法的dot函数;
Out[159]:
array([[24, 30, 36], [51, 66, 81]])
In [160]:
from numpy.linalg import det
In [161]:
arr = np.array([[1, 2], [3, 4]])
arr
Out[161]:
array([[1, 2], [3, 4]])
In [162]:
det(arr)
Out[162]:
-2.0000000000000004
# 图像处理
In [164]:
from PIL import Image
import numpy as np
In [165]:
im = np.array(Image.open('C:/Users/LP/Desktop/2.76.jpeg'))
print(im.shape,im.dtype)
(350, 583, 3) uint8
In [166]:
im
Out[166]:
array([[[226, 226, 226], [226, 226, 226], [226, 226, 226], ..., [198, 198, 198], [197, 197, 197], [196, 196, 196]], [[226, 226, 226], [226, 226, 226], [226, 226, 226], ..., [198, 198, 198], [197, 197, 197], [196, 196, 196]], [[226, 226, 226], [226, 226, 226], [226, 226, 226], ..., [198, 198, 198], [197, 197, 197], [195, 195, 195]], ..., [[210, 210, 210], [211, 211, 211], [211, 211, 211], ..., [122, 122, 122], [124, 124, 124], [125, 125, 125]], [[211, 211, 211], [211, 211, 211], [211, 211, 211], ..., [120, 120, 120], [122, 122, 122], [124, 124, 124]], [[211, 211, 211], [211, 211, 211], [212, 212, 212], ..., [119, 119, 119], [121, 121, 121], [123, 123, 123]]], dtype=uint8)
In [170]:
b = [255, 255, 255] - im #数组运算
new_im = Image.fromarray(b.astype('uint8'))
new_im.save('C:/Users/LP/Desktop/2.79.jpeg') #保存为新图像
In [172]:
b
Out[172]:
array([[[ 29, 29, 29], [ 29, 29, 29], [ 29, 29, 29], ..., [ 57, 57, 57], [ 58, 58, 58], [ 59, 59, 59]], [[ 29, 29, 29], [ 29, 29, 29], [ 29, 29, 29], ..., [ 57, 57, 57], [ 58, 58, 58], [ 59, 59, 59]], [[ 29, 29, 29], [ 29, 29, 29], [ 29, 29, 29], ..., [ 57, 57, 57], [ 58, 58, 58], [ 60, 60, 60]], ..., [[ 45, 45, 45], [ 44, 44, 44], [ 44, 44, 44], ..., [133, 133, 133], [131, 131, 131], [130, 130, 130]], [[ 44, 44, 44], [ 44, 44, 44], [ 44, 44, 44], ..., [135, 135, 135], [133, 133, 133], [131, 131, 131]], [[ 44, 44, 44], [ 44, 44, 44], [ 43, 43, 43], ..., [136, 136, 136], [134, 134, 134], [132, 132, 132]]])
In [ ]: