文章目录
一、矩阵相关操作
1、三种构造矩阵的方法
- np.matrix(二维容器, copy=True)
一参为可被解释为矩阵的二维容器,比如二维数组、二维列表;
二参为copy,表示是否将原容器的数据复制一份,若为True则不会影响原容器,若为false则会影响原容器数据 - numpy.mat(可被解释的二维容器)——>这种方法则一定是将数据与元容器共享
- numpy.bmat(‘A B; C D’) ——>块级拼接,这种方法是将多个小的矩阵合成一个大的矩阵
2、常用属性
- T属性:转置运算
- I属性:广义逆矩阵,非方阵也可以算出逆矩阵(两个互逆矩阵相乘等于单位矩阵,类似1;即为A*B=E)
- 两矩阵相乘(举例二维矩阵):
第一行乘第一列之和,第一行乘第二列之和
第二行乘第一列之和,第二行乘第二列之和
3、练习代码
import numpy as np
# 二维数组作为二维容器
a = np.array([
[1, 2],
[3, 4]
])
# 将二维容器转换为矩阵
b = np.matrix(a)
c = np.mat(a)
# 改变容器数据
a *= 10
# 一个会变(mat)一个不会变(matrix),若为二维列表则都会变(会自动复制一份)
# 当然若设置matrix的copy也可以变:b = np.matrix(a, copy=False)
print(b, type(b))
print("-----------------------------")
print(c, type(c))
# 直接创建矩阵
d = np.mat('11 22; 33 44')
e = np.mat('55 66; 77 88')
print("-----------------------------")
print(d, type(d))
# 块级拼接
f = np.bmat('d e') # 竖直拼接:f = np.bmat('d;e')
print("-----------------------------")
print(f, type(f))
# 逆矩阵和矩阵相乘
print("-----------------------------")
print(c.I)
print(c * d)
二、ufunc统一泛化函数
1、ufunc对象
统一泛化函数,与vectorize类似,只是frompyfunc会在数据后面跟上类型
2、格式
numpy.frompyfunc(标量函数, 函数个数, 返回值个数)
返回一个ufunc泛化函数对象,矢量返回值
3、ufunc对象的方法(需要加一个add)
- numpy.add.reduce():累加数组元素
- numpy.add.accumulate():元素累加过程
- numpy.add.reduceat():分段累加(在指定位置累加)
- numpy.add.outer():求外和,分别给每一个元素加上给定列表中的数据
区分:numpy.outer()是求外积,给每一个元素乘上给定列表中的数据
4、练习代码
import numpy as np
# def func(a, b):
# return a+b, a-b, a*b
# A = np.array([10, 20, 30])
# B = np.array([100, 200, 300])
#
# C = np.vectorize(func)(A, B)
# print(C)
# D = np.frompyfunc(func, 2, 3)(A, B) # 2说明有两个参数,3说明有三个返回值
# print(D)
'''
ufunc函数对象的方法
'''
a = np.arange(1, 7)
print(a)
b = np.add.reduce(a)
print(b)
c = np.add.accumulate(a)
print(c)
print("-----------------------------------")
d = np.add.reduceat(a, [0, 2, 4]) # 在0,2,4位置做累加,即0后2前做一段累加,2后4前做一段累加,4后做一段累加
print(d)
e = np.add.outer([10, 20, 30], a) # 求外和,分别给每一个元素加上10,20,30,组成新的数组
print(e)
f = np.outer([10, 20, 30], a)
print(f)