tensorflow - 在张量流中跨维度添加连续元素(np.add.reduceat)
问题描述
是否有任何 tensorflow 功能或优雅的执行以下任务
考虑我有维度说 $3 \times 10$ 的二维张量。现在我想沿维度 $1$(或行)添加连续元素,其中要添加的连续元素的数量由张量决定。如果它说 $[2,2 ,4,2]$ 输出张量的大小应为 $ 3 \times 4$。因为 $ [ a_1 + a_2 , a_3+a_4 , a_5+a_6+a_7+a_8 , a_9+a_10]$ 会在每一行张量
前任:
$\begin{bmatrix}
1 & 2 & 3 & 4 & 5 & 6 & 1 & 2 & 3 &4\\
7 & 8 & 9 & 10 &11 &12 & 7 & 8 & 9 & 10\\
13 &14 &15 &16 &17 &18 & 13 &14 &15 &16
\end{bmatrix}$
并且输出应该如下
$\begin{bmatrix}
3 & 7 & 14 & 7\\
15 & 19 &38 &19\\
27 &31 & 62 &31
\end{bmatrix}$
编辑:在 numpy np.add.reduceat中似乎有这个功能
解决方案
张量流中没有这样的功能。但是您可以通过拆分数组来构造它:
def tf_reduceat(data, at_array, axis=-1):
split_data = tf.split(data, at_array, axis=axis)
return tf.stack([tf.reduce_sum(i, axis=axis) for i in split_data], axis=axis)
a = tf.constant([[1, 2, 3, 4, 5, 6, 1, 2, 3, 4],
[7, 8, 9, 10, 11, 12, 7, 8, 9, 10],
[13, 14, 15, 16, 17, 18, 13, 14, 15, 16]])
result = tf_reduceat(a, [2, 2, 4, 2])
运行结果产生:
array([[ 3, 7, 14, 7],
[15, 19, 38, 19],
[27, 31, 62, 31]], dtype=int32)
推荐阅读
- javascript - 按钮先单击 2 次,然后根据需要工作
- pandas - 每个用户在日期范围内的滚动聚合
- html - 通过node API在OBS中创建Browser Source
- excel - 尽管通过 VBA 打开代码,但仍然遇到“编译错误:找不到方法或数据成员”
- javascript - Google Sheets 脚本优化 - 避免最长执行时间
- python - python - 排列带有链接列的excel文件
- php - single.php 上的 Echo 作者头像
- sql - 当 SELECT 子句中存在 ISNULL 时,如何舍入值中的小数?
- java - 是否可以使用 ByteBuddy Advice 机制将本机方法封装在线程中?
- java - 有没有办法从 Kafka 消息中读取任意 JSON 并将该任意 JSON 作为相同内容的 Kafka 消息转发?