我们只当使用tensorflow的tf.matmul()可以进行矩阵间的运算,但是要求矩阵的每一个维度的长度都要大于2,假如我们进行向量与矩阵的乘法时,使用该函数,则会报错。
具体地,我们使用一个2为的向量乘以一个2×2的矩阵:
import tensorflow as tf
a = tf.constant([2, 3])
b = tf.constant([[0, 1], [2, 3]])
c = tf.matmul(a, b)
with tf.Session() as sess:
print(sess.run(c))
会报错:
ValueError: Shape must be rank 2 but is rank 1 for 'MatMul_11' (op: 'MatMul') with input shapes: [2], [2,2].
那如何实现向量与矩阵相乘呢?
我们知道矩阵乘法的本质是对矩阵的向量进行线性组合,利用这个性质,我们可以对矩阵进行点乘再相加,从实现向量与矩阵的乘法。具体如下
1、矩阵×向量
[[0, 1], [2,
[2, 3]] × 3]
具体代码实现:
import tensorflow as tf
a = tf.constant([2, 3])
b = tf.constant([[0, 1], [2, 3]])
mul =tf.reduce_sum(tf.multiply(a, b), reduction_indices=1)
with tf.Session() as sess:
print(sess.run(mul))
结果是:
[ 3 13]
2、向量×矩阵
[2, 3] × [[0, 1],
[2, 3]]
这个时候需要将矩阵进行转置,然后在进行点乘,再横向相加
具体代码如下:
import tensorflow as tf
a = tf.constant([2, 3])
b = tf.constant([[0, 1], [2, 3]])
mul =tf.reduce_sum(tf.multiply(a, tf.transpose(b, perm=[1, 0])), reduction_indices=1)
with tf.Session() as sess:
print(sess.run(mul))
结果:
[ 6 11]