1. 程式人生 > >np和tf在矩陣相乘和點乘上的區別

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適用任何情況