python - 矩阵减法类似于张量流中的矩阵乘法
问题描述
这是我的第一篇文章,我通常在档案中找到我所有的答案,但是很难解决这个问题,感谢您的帮助!
我有两个矩阵 A 和 B。使用 tf.matmult 执行矩阵乘法运算很简单。但我想做矩阵减法,类似于矩阵乘法的工作原理。例如,如果我有。
A = tf.constant([[1, 1, 1, 2, 3, 1],[1,2,3,4,5,6],[4,3,2,1,6,5]])
B = tf.constant([[1,3,1],[2,1,1]])
#B*A
X = tf.matmult(B,A)
>>>X = [[8,10,12,15,24,24],[7,7,7,9,17,13]]
我想做的是做类似 matmult 的操作,但不是乘法,而是减法和平方。例如...
对于 x 11,其中下标 11 是矩阵 X 的第 1 行第 1 列。
= (-b 11 + a 11 ) 2 + (-b 12 + a 21 ) 2 + (-b 13 + a 31 ) 2
和
x 12 = (-b 11 + a 12 ) 2 + (-b 12 + a 22 ) 2 + (-b 13 + a 32 ) 2
等等类似于矩阵乘法的工作原理。
因此,如果我们采用上面的矩阵 A 和 B 并执行上述操作(称为 matmultsubtract),我们得到,
tf.matmultsubtract(B,A) 给出:
[[(-1+1) 2 +(-3+1) 2 +(-1+4) 2 , (-1+1) 2 +(-3+2) 2 +(-1+3) 2 , ...],
[(-2+1) 2 +(-1+1) 2 +(-1+4) 2 , (-2+1) 2 +(-1+2) 2 +(-1+3) 2 , . ..]]
如果通过手动迭代而不是 np.matmult 使用 numpy 数组(您可以使用两个嵌套的 for 循环),这并不难,但是 tensorflow 的 for 循环有问题,我不知道该怎么做。
谢谢您的帮助。
解决方案
尝试可能不被视为矩阵减法的矢量化操作。
# shape=(2,3,6)
B_new = tf.tile(tf.expand_dims(B,axis=-1),multiples=[1,1,A.shape[1]])
# shape=(2,3,6)
A_new = tf.tile(tf.expand_dims(A,axis=0),multiples=[B.shape[0],1,1])
# shape=(2,6)
result = tf.reduce_sum(tf.square(A_new - B_new),axis=1)
with tf.Session() as sess:
print(sess.run(result))
[[13 5 1 2 33 25]
[10 6 6 9 42 42]]
推荐阅读
- node.js - cb 不是函数 - 使用 winston 处理未处理的 Promise Rejection 时
- c++ - 是“double x = 0.0d;”中的“d”吗 g++ 扩展?
- linux - 检索用于启动进程的命令 - shell 脚本
- html - 在 div 表中创建 colspan
- python - Google 方向 API 在 Jupyter Notebook 中不起作用
- vue.js - nuxt.config.ts 中的 Nuxt 环境变量
- python - 使用遗传算法或模拟退火的设施定位问题
- c++ - 初始化时无法将“日期”转换为“int”作为错误
- pandas - 如何合并一行的两列,就像 Pandas 中的“在 excel 中合并和居中”一样?
- scala - Spark 操作员停止使用 Kubernetes