np和tf在矩陣相乘和點乘上的區別
阿新 • • 發佈:2019-01-26
剛接觸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適用任何情況