numpy的使用
numpy是所有Python科学计算与数据分析库的基础,Scipy与Pandas库都依赖于numpy。
numpy的基本类型是多维的数组ndarray,一般常用的矩阵matrix可以看作是ndarray的子类,可以通过ndarray的一些属性来更加深入的了解一个ndarray的数据结构。
print(' 维度数:', arr.ndim)
print(' 每维的形状:', arr.shape)
print(' 元素个数:', arr.size)
print(' 数据类型:', arr.dtye)
print(' 每个元素占的字节:', arr.itemsize)
索引与切片
对于一维数组ten = np.arrange(10)
ten #[0 1 2 3 4 5 6 7 8 9]
ten[2] #第3个元素2
ten[-2] #倒数第2个元素,最后一个元素下标为-1
ten[2:5] #区间切片,前闭后开,默认步长为1,结果为[2 3 4]
ten[:-7] #区间切片,从后向前(后开区间),指定了结束的位置,结果为[0 1 2]
ten[1:7:2] #步长为2,结果为[1 3 5]
ten[-1::-1] #步长为负时,从后向前,结果为[9 8 7 6 5 4 3 2 1 0]
ten[0, 2, 3] #使用数组作为索引,取多个元素
对于二维数组ten.shape = (2, 5)
ten #[[0 1 2 3 4] [5 6 7 8 9]]
ten[1, 3] #二维数组索引单个元素,第2行第4列的元素
ten[0] #第1行的所有元素,相当于ten[0, :]
ten[1:, :] #除第1行外的所有元素
ten[:, ::2] #所有行,间隔一列选取数据
ten[:, [0,3,1]] #所有行,用数组选择指定列
矩阵运算
在numpy中,惩罚有两种不同的叫法。
第一种是数量乘法,即两个相同shape的矩阵对应元素相乘np.multiply(arr, arr2)
;另外一种是点乘(dot 乘法),即线代中矩阵的相乘arr.dot(arr2.T)
。
numpy中reshape函数
- mat (or array).reshape(m, -1)
必须是矩阵格式或者数组格式,才能使用 .reshape(m, -1) 函数, 表示将此矩阵或者数组重组,以 m行d列的形式表示。1的作用就在于: 自动计算d:d=数组或者矩阵里面所有的元素个数/c, d必须是整数,不然报错)
arr.shape # (a,b)
arr.reshape(m,-1) #改变维度为m行、d列 (-1表示列数自动计算,d= a*b /m )
arr.reshape(-1,m) #改变维度为d行、m列 (-1表示行数自动计算,d= a*b /m )
arr=np.arange(16).reshape(2,8)
arr
'''
out:
array([[ 0, 1, 2, 3, 4, 5, 6, 7],
[ 8, 9, 10, 11, 12, 13, 14, 15]])
'''
arr.reshape(4,-1) #将arr变成4行的格式,列数自动计算的(c=4, d=16/4=4)
'''
out:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
'''
arr.reshape(8,-1) #将arr变成8行的格式,列数自动计算的(c=8, d=16/8=2)
'''
out:
array([[ 0, 1],
[ 2, 3],
[ 4, 5],
[ 6, 7],
[ 8, 9],
[10, 11],
[12, 13],
[14, 15]])
'''
arr.reshape(10,-1) #将arr变成10行的格式,列数自动计算的(c=10, d=16/10=1.6 != Int)
'''
out:
ValueError: cannot reshape array of size 16 into shape (10,newaxis)
'''