numpy概述:
numpy(Numerical Python)提供了python对多维数组对象的支持:ndarray,具有矢量运算能力,快速、节省空间。numpy支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
一,ndarray数组
1,ndarray数组创建:
1>使用array函数创建:
将输入数据(列表,元组,数组或其他序列类型转换为ndarray,可以指定dtype类型)
# 使用默认创建一个array数组
array = numpy.array([[1, 2, 3],[2, 3, 4]])
# 指定dtype类型
a = np.array([2, 3, 5], dtype=numpy.int64)
b = np.array([4, 5, 6], dtype=numpy.float)
2>使用zeros和ones函数直接得到全部为0和1矩阵
zero_test = np.zeros((3,4), dtype=int)
print(zero_test)
ones_test = np.ones((4,4), dtype=int)
print(ones_test)
3>获取随机元素 设置行列数
arange函数和Python自带的range函数类似,只不过不是创建的序列而是一个array数组
range_test = np.arange(12).reshape(3,4)
4>分段获取一个矩阵
line_test = np.linspace(1, 10, 20, dtype=float).reshape(10, 2)
print(line_test)
2,基本属性访问:
# 访问 维数
print('number of dim:', array.ndim)
# 访问 行列数
print('shape:', array.shape)
# 访问 多少个元素
print('size:', array.size)
二,矩阵的基本运算:
a = np.array([[12, 334, 5],[23, 34, 56],[2, 35, 54]],dtype=int)
b = np.array([[234, 325, 445],[32, 54, 56],[32, 55, 67]],dtype=int)
1,加减法和三角函数
c = a + b
c = a - b
d = b**2
e = 10*np.sin(a)
f = 10*np.tan(a)
2,矩阵的乘法:
1>逐个相乘:
test = a * b
2>矩阵的乘法
# 第一种写法
test_dot = np.dot(a, b)
#第二种写法
test_dot_two = a.dot(b)
3,矩阵元素
先随机获取一个矩阵:
array = np.random.random((2, 4))
1>矩阵元素求和,行求和和列求和
将每一行所有元素加起来返回一个新的矩阵
print(np.sum(array, axis=1))
将每一列所有元素加起来返回一个新的矩阵
print(np.sum(array, axis=0))
注:参数axis是1对行操作,是0对列操作
2> 求最每一行或者每一列最小元素,并且返回一个新矩阵
# 求每一列最小元素的值
print(np.min(array, axis=0))
# 求每一行最小元素的值
print(np.min(array, axis=1))
3> 求最每一行或者每一列最大元素,并且返回一个新矩阵
# 求每一行最大元素的值
print(np.max(array, axis=1))
# 求每一列最大元素的值
print(np.max(array, axis=0))
4>将两个相同行数矩阵并起来
如下:
A = np.arange(2, 18).reshape((4, 4))
B = np.arange(16).reshape((4, 4))
print(np.concatenate((A, B), axis=1))
5>求出矩阵的平均值
# 平均值 可以指定对行或者列进行计算
print(np.mean(A, (1, 6)))
print(A.mean())
print(np.average(A))
6>获取中位数
# 中位数
print(np.median(A))
7>逐渐累加
注:举例第二个元素就是第一个元素加上第二个元素,第三个元素就是第一个元素加上第二个元素在加上第三个元素,以此类推。
print(np.cumsum(A))
8>矩阵的转置:
# 求矩阵的转置(行变列列变行)
print(np.transpose(B))
print(B.T)
print((B.T).dot(B))
9>clip功能
# clip功能 小于的变为最小值,大于的变为最大值 中间保持不变
print(np.clip(A, 5, 9))
4,矩阵索引值
先获取一个矩阵
A = np.arange(2, 18).reshape((4, 4))
1>获取最值索引
# 最小值
print(np.argmin(A))
# 最大值
print(np.argmax(A))
2>利用索引访问矩阵
# numpy的索引 根据索引分析矩阵
C = np.arange(2, 38).reshape(6, 6)
print(C)
print(C[3][2])
print(C[3, 2])
# 整体行数和列数
print(C[3:])
print(C[:1])
3>使用for循环和转置整行整列访问矩阵
# 每一行每一行访问
print("row")
for row in C:
print(row)
# 每一列每一列访问
print('cloum')
for cloumn in C.T:
print(cloumn)
4>使用flatten函数将矩阵编程一个一维矩阵,使用item逐个输出元素
print(C.flatten())
for item in C.flat:
print(item)
3,其他
1>,矩阵和别的number比较大小
# 判断元素是否小于100是则true否则false
print(b < 100)
2>获取一个范围为[0, 1)随机矩阵
# 随机矩阵
array = np.random.random((2, 4))
print(array)
三,array的其他操作
1,矩阵的合并
1>两个矩阵合并
# array合并 上下合并
A = np.array([1, 1, 1])
B = np.array([2, 2, 2])
# 垂直方向合并
D = np.vstack((A, B))
# 水平方向合并
E = np.hstack((A, B))
print(D)
print(E)
2>多个矩阵合并
# 多个array纵向横向合并
C = np.concatenate((A, B, B, A), axis=0)
注:axis = 0 表示垂直方向 axis =1 表示水平方向
2,矩阵的分割:
1>等量分割:
A = np.arange(12).reshape(3,4)
print(A)
# 垂直分割
print(np.split(A, 3, axis=0))
# 水平分割
print(np.split(A, 4, axis=1))
注:
垂直方向分割的时候,行数和份数要求倍数关系。
水平方向分割的时候,列数和份数要求倍数关系。
2>不等量分割
# 实现不等量的分割
print(np.array_split(A, 2, axis=0))
一般情况·下,分割的矩阵是先量多再量少