向量化两个3D张量的按元素乘积

知识管理

有没有一种方法可以对以下代码进行矢量化处理,以便完全删除循环?

x = tf.constant([[[1,2,3],[2,3,4]],[[1,2,3],[2,3,5]]])
t=tf.eye(x.shape[1])[:,:,None]
for i in range(x.shape[0]):
    out = tf.multiply(t,x[i].numpy())
    out=tf.reshape(out, shape=(out.shape[0], out.shape[-1]*out.shape[-2]))
    print(out)

简而言之:如何将3D张量乘以3D张量的每个元素?就我而言:3个D张量是:

tf.Tensor(
[[[1.]
  [0.]]

 [[0.]
  [1.]]], shape=(2, 2, 1), dtype=float32)

tf.Tensor(
[[[1 2 3]
  [2 3 4]]

 [[1 2 3]
  [2 3 5]]], shape=(2, 2, 3), dtype=int32)

预期输出:以下2个张量合并在一起,形状为2 * 2 * 6。

tf.Tensor(
[[1. 2. 3. 0. 0. 0.]
 [0. 0. 0. 2. 3. 4.]], shape=(2, 6), dtype=float32)
tf.Tensor(
[[1. 2. 3. 0. 0. 0.]
 [0. 0. 0. 2. 3. 5.]], shape=(2, 6), dtype=float32)
Jdehesa

这是您如何获得该结果的方法:

import tensorflow as tf

x = tf.constant([[[1, 2, 3], [2, 3, 4]],
                 [[1, 2, 3], [2, 3, 5]]], dtype=tf.float32)
t = tf.eye(tf.shape(x)[1], dtype=x.dtype)
# Add one dimension to x and one dimension to t
xt = tf.expand_dims(x, 1) * tf.expand_dims(t, 2)
# Reshape
result = tf.reshape(xt, (tf.shape(x)[0], tf.shape(x)[1], -1))
print(result.numpy())
# [[[1. 2. 3. 0. 0. 0.]
#   [0. 0. 0. 2. 3. 4.]]
#
#  [[1. 2. 3. 0. 0. 0.]
#   [0. 0. 0. 2. 3. 5.]]]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Tensorflow中向量化两个不同形状矩阵的逐行逐元素乘积

两个3D张量之间的点积

在Keras中产生两个3D张量

如何用两个2d张量索引3d张量?

两个二维列表的按元素乘积

从两个变换的3D向量推导3D旋转矩阵

如何通过沿特定轴交织两个3D张量来合并它们?

将两个不同形状的 3d 张量相乘(Tensorflow)

从两个向量和一个矩阵创建 3D 曲面图

按字母顺序粘贴两个向量的元素

由四元数旋转的3D中两个3D向量之间的角度

计算旋转矩阵以在3D空间中对齐两个向量?

找出两个3D向量的所有正负组合之间的夹角

两个3D向量之间的角度,结果范围为0-360

具有3D向量的两个Numpy数组的点积

Lua的新手-获取两个3D向量之间的角度

如何确定两个向量之间的角度是外部的还是内部的?(在3D空间中)

如何计算两个向量的某些部分的乘积

如何从张量流中两个向量的元素组合创建矩阵

优化搜索两个 3D 数组中最近的四个元素

如何使用R中的Plotly包按两个因子分组的3D线图?

将2D数组的元素与两个1D数组的乘积进行比较?

在MATLAB中向量化两个嵌套的for循环

使用两个浮点数存储3D法线向量的有效方法

获取使用three.js所两个3D向量之间的方向是什么?

在同构坐标(x,y,z,w)中求解两个3D向量的叉积

如何将两个只有一个公共尺寸(批大小)的3D张量传递给dynamic_lstm?

如何向量化3D Numpy数组

将值分配向量化为3D数组