当前位置:   article > 正文

python 矩阵点乘 、 基于向量运算的 softmax实现_python中矩阵乘以行向量

python中矩阵乘以行向量

 

1、关于python中矩阵点乘(除)

只允许三种情况出现:

(1)两个矩阵维度相同,则对应元素相乘

(2)矩阵乘以一个向量:

    a:  矩阵与行向量 相乘(mxn * 1*n 形式), 此时行向量长度 必须等于矩阵的列数

    b:矩阵与列向量相乘(mxn  * mx1 形式) 此时 矩阵的行数必须与列向量的行数相同

举例如下:

  1. a = np.array([
  2. [1, 2],
  3. [4,5],
  4. [7,8]
  5. ])
  6. b = np.array([2,3])
  7. print(a*b) #即 行向量 每个元素乘以 矩阵的对应列
  8. c = np.array([2,3,4])
  9. #print(a*c) 不可以 3X2 * 1x3
  10. d = np.array([
  11. [2],
  12. [3],
  13. [4]
  14. ])
  15. print(a*d) # 即列向量的每个元素乘以对应行
  16. e = [
  17. [2,2],
  18. [3,4],
  19. [4,4]
  20. ]
  21. print(a*e) # 即当矩阵维度相同时 对应元素相乘

 

2 、softmax向量化实现

  1. import numpy as np
  2. '''
  3. (1) softmax(x) == softmax(x+c)
  4. '''
  5. def soft_max(x):
  6. if(len(x.shape) > 1):
  7. exp_minmax = lambda x:np.exp(x-np.max(x))
  8. x = np.apply_along_axis(exp_minmax,1,x)
  9. denom = lambda x:1.0/np.sum(x)
  10. denominator = np.apply_along_axis(denom,1,x)
  11. if(len(denominator.shape) == 1): # 转换为 n x 1 形式的矩阵
  12. denominator = denominator.reshape((denominator.shape[0],1))
  13. x = x*denominator
  14. else:
  15. x = np.exp(x-np.max(x))
  16. denominator = 1.0/np.sum(x)
  17. x = x.dot(denominator)
  18. return x

 

一篇讲解交叉熵很好的文章 : https://blog.csdn.net/red_stone1/article/details/80735068

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/678952
推荐阅读
相关标签
  

闽ICP备14008679号