Python之数据分析(Numpy的矩阵相关操作、ufunc泛化函数对象)

一、矩阵相关操作

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)

ufunc对象

猜你喜欢

转载自blog.csdn.net/Viewinfinitely/article/details/107924114