机器学习的理论基础-1:矩阵1

1.名词:矩阵,张量,转置,主对角线,广播
2.矩阵和向量相加–>广播
eg:
##广播 矩阵加向量

import numpy as np
    a=np.array([[1,2,3],[4,5,6],[7,8,9]])
    c=[1,2,3]
    print(a)
    b= a+100
    print(b)
    d=a+c
    print(d)
    e =a/c
    print(e)
    
    输出结果:


runfile('C:/Users/Administrator/.spyder-py3/temp.py', wdir='C:/Users/Administrator/.spyder-py3')
[[1 2 3]
 [4 5 6]
 [7 8 9]]
[[101 102 103]
 [104 105 106]
 [107 108 109]]
[[ 2  4  6]
 [ 5  7  9]
 [ 8 10 12]]
[[1.  1.  1. ]
 [4.  2.5 2. ]
 [7.  4.  3. ]]

在这里插入图片描述
3.矩阵的标准乘积与两个矩阵对应元素的乘积(hadamard乘积)
在这里插入图片描述
hadamard矩阵的基本构成可以用下面的矩阵来描述
在这里插入图片描述
Hadamard矩阵是由+1和-1元素构成的正交方阵。
如果:AAT=E(E为单位矩阵,AT表示“矩阵A的转置矩阵”。)或ATA=E,则n阶实矩阵A称为正交矩阵,若A为正交阵,则满足以下条件 [2] [3] :
1)AT是正交矩阵
2)(E为单位矩阵)
3)A的各行是单位向量且两两正交
4)A的各列是单位向量且两两正交
5)(Ax,Ay)=(x,y)x,y∈R
6)|A|=1或-1
7)
8)正交矩阵通常用字母Q表示。
hadamard矩阵的一个典型应用是用于模板匹配。而SATD匹配算法则主要用到hadamard矩阵

https://blog.csdn.net/Aoulun/article/details/80433638
http://fourier.eng.hmc.edu/e161/lectures/wht/node1.html
# -*- coding: utf-8 -*-
"""
Created on Thu Jul 26 14:22:40 2018

@author: Administrator
"""

import numpy as np

a = np.array([[1,2],[3,4],[11,12]])
b = np.array([[5,6,13],[7,8,14]])
c = np.array([[1,2,13],[3,4,25],[11,12,23]])
d = np.array([[5,6,2],[7,8,29],[13,14,15]])

matrix_a = np.matrix(a)         # (3,2)
matrix_b = np.matrix(b)         # (2,3)
matrix_c = np.matrix(c)         # (3,3)
matrix_d = np.matrix(d)         # (3,3)

print(type(a),type(matrix_a))  # <class 'numpy.ndarray'> <class 'numpy.matrixlib.defmatrix.matrix'>
mat_a = np.mat(a)
print(type(a),type(matrix_a))  # <class 'numpy.ndarray'> <class 'numpy.matrixlib.defmatrix.matrix'>



'''
# 1) matrix multiplication
矩阵乘法: (m,n) x (n,p) --> (m,p)    # 矩阵乘法运算前提:矩阵1的列=矩阵2的行
3种用法: np.dot(matrix_a, matrix_b) == matrix_a @ matrix_b == matrix_a * matrix_b
'''
method_1 = matrix_a @ matrix_b
method_2 = np.dot(matrix_a, matrix_b)

print(method_1)
#[[ 19  22  41]
# [ 43  50  95]
# [139 162 311]]
print(method_2 == method_1)
#[[ True  True  True]
# [ True  True  True]
# [ True  True  True]]
print(matrix_c * matrix_d == matrix_c @ matrix_d)
#[[ True  True  True]
# [ True  True  True]
# [ True  True  True]]


'''
# 2) element-wise product : 矩阵对应元素相乘
1种用法:np.multiply(matrix_c, matrix_d)
对于nd.array()类型而言,数组 arrA * arrB 只能element-wise produt(对应元素相乘) 
'''
print(matrix_c, matrix_d, sep='\n')
#[[ 1  2 13]
# [ 3  4 25]
# [11 12 23]]
#[[ 5  6  2]
# [ 7  8 29]
# [13 14 15]]

method_1 = np.multiply(matrix_c, matrix_d)      # 对应位置元素相乘
method_2 = c*d;
print(method_1)
#[[  5  12  26]
# [ 21  32 725]
# [143 168 345]]
print(method_2)
print(method_2 == method_1)
实验结果:

runfile('C:/Users/Administrator/.spyder-py3/temp.py', wdir='C:/Users/Administrator/.spyder-py3')
<class 'numpy.ndarray'> <class 'numpy.matrixlib.defmatrix.matrix'>
<class 'numpy.ndarray'> <class 'numpy.matrixlib.defmatrix.matrix'>
[[ 19  22  41]
 [ 43  50  95]
 [139 162 311]]
[[ True  True  True]
 [ True  True  True]
 [ True  True  True]]
[[ True  True  True]
 [ True  True  True]
 [ True  True  True]]
[[ 1  2 13]
 [ 3  4 25]
 [11 12 23]]
[[ 5  6  2]
 [ 7  8 29]
 [13 14 15]]
[[  5  12  26]
 [ 21  32 725]
 [143 168 345]]
[[  5  12  26]
 [ 21  32 725]
 [143 168 345]]
[[ True  True  True]
 [ True  True  True]
 [ True  True  True]]

4.单位矩阵:所有沿主对角线的元素都是1,其他都是0

猜你喜欢

转载自blog.csdn.net/zjguilai/article/details/89916982
今日推荐