np和tf在矩阵相乘和点乘上的区别

刚接触tensorflow,还不算太会,今天刚敲了一个矩阵相乘的问题,发现tf的使用和np的使用有点区别,在不规则写法(不规则写法是一维向量的一种写法,按行向量处理)中矩阵相乘问题,np可以执行,但是tf不行。

1、多行多列矩阵相乘和点乘问题

①tf和np的用法完全一致。

②相乘,必须是行列对应,第一个矩阵的列和第二个矩阵的行必须相等

③点乘,两个矩阵必须完全一致

#coding:utf-8
import numpy as np
import tensorflow as tf
A=np.array([[1,2,3],[4,5,6]])
B=np.array([[1,2],[3,4],[5,6]])
print(np.dot(A,B))        #相乘
A=np.array([[1,2,3],[4,5,6]])
B=np.array([[1,2,3],[4,5,6]])
print(np.multiply(A,B))   #点乘
#################################################
A=tf.constant([[1,2,3],[4,5,6]])
B=tf.constant([[1,2],[3,4],[5,6]])
C=tf.matmul(A,B)
sess=tf.Session()
print(sess.run(C))        #相乘
AA=tf.constant([[1,2,3],[4,5,6]])
BB=tf.constant([[1,2,3],[4,5,6]])
CC=tf.multiply(AA,BB)
print(sess.run(CC))      #点乘
sess.close()

2、规则写法下矩阵相乘和点乘问题

①一个是一维,一个是多维

②两个都是一维

③相乘必须行列对应,点乘可以扩展至相同行列,只有一维向量可以扩展,若扩展不到相同行列不能点乘

④np和tf用法一致

import numpy as np
import tensorflow as tf
#1*3  3*2   只能相乘,但是不能点乘,一维向量不能扩展至和多维向量一致,多维向量不能扩展
a=np.array([[1,2,3]])
b=np.array([[1,2],[2,3],[3,4]])
print(np.dot(a,b))
#1*2  3*2  只能点乘,不能相乘
a=np.array([[1,2]])
b=np.array([[1,2],[2,3],[3,4]])
print(np.multiply(a,b))
#都是一维  相乘只要满足行列对应相等即可,点乘,两个都是一维向量,都能扩展
a=np.array([[1,2,3]])
b=np.array([[1],[2],[3]])
print(np.dot(a,b))
print(np.multiply(a,b))
#######################################################################
a=tf.constant([[1,2,3]])
b=tf.constant([[1,2],[2,3],[3,4]])
c=tf.matmul(a,b)
sess=tf.Session()
print(sess.run(c))
a=tf.constant([[1,2]])
b=tf.constant([[1,2],[2,3],[3,4]])
c=tf.multiply(a,b)
print(sess.run(c))
a=tf.constant([[1,2,3]])
b=tf.constant([[1],[2],[3]])
c=tf.matmul(a,b)
cc=tf.multiply(a,b)
sess=tf.Session()
print(sess.run(c))
print(sess.run(cc))
sess.close()

3、不规则写法下的矩阵相乘和点乘问题

①np的使用同上,不规则写法按行向量处理

②tf的点乘使用同上,不规则写法按行向量处理

③tf的相乘不能使用(tf的相乘只适用规则写法)

import numpy as np
import tensorflow as tf
a=np.array([1,2])         #不规则写法
b=np.array([[1],[2],[3]])
print(np.multiply(a,b))   #可以点乘
a=np.array([1,2,3])
b=np.array([[1,2],[2,2],[3,2]])
print(np.dot(a,b))        #可以相乘
########################################################
a=tf.constant([1,2])
b=tf.constant([[1],[2],[3]])
c=tf.multiply(a,b)        #只能点乘
sess=tf.Session()
print(sess.run(c))
#a=tf.constant([1,2,3])   #tf在不规则情况下不能使用相乘
a=tf.constant([[1,2,3]]) 
b=tf.constant([[1],[2],[3]])
c=tf.matmul(a,b)
print(sess.run(c))
sess.close()

总结:

①规则写法下,np和tf用法一致,相乘不用说,满足行列对应相等即可相乘,点乘中一维向量可以扩展,若能扩展至行列相等,则能点乘,否则不能点乘。

②不规则写法下,np和tf的点乘用法一致,tf不能相乘,np可以。

③综述:np和tf在点乘上用法一致,在不规则情况下tf不能使用,np适用任何情况

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hqh131360239/article/details/80349568
个人分类: Python
上一篇TensorFlow常见函数
下一篇SoftMax在tensorflow下实现Mnist数据快速读入和随机填充训练
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭