如何在TensorFlow中实现选择性meshgrid以生成指定组合向量?
实现TensorFlow中生成指定元素对的需求
完全可以实现,核心思路是通过筛选元素索引位置来获取符合要求的有序对(仅保留原数组中位置靠前的元素与位置靠后的元素的组合),具体代码如下:
import tensorflow as tf def combine(x): # 生成原数组的索引序列 indices = tf.range(tf.shape(x)[0]) # 创建索引的全量网格 idx_i, idx_j = tf.meshgrid(indices, indices, indexing='ij') # 筛选出"前元素索引 < 后元素索引"的掩码 valid_mask = idx_i < idx_j # 提取符合条件的索引对 target_indices = tf.stack([ tf.boolean_mask(idx_i, valid_mask), tf.boolean_mask(idx_j, valid_mask) ], axis=1) # 根据索引从原数组中取出对应元素,组合成目标张量 combo = tf.gather(x, target_indices) print(combo) x = tf.constant([11, 0, 7, 1]) combine(x)
代码说明
- 先创建原数组的索引序列,通过索引位置来判断元素对是否符合要求;
- 用
meshgrid生成索引的全量网格,再通过idx_i < idx_j的掩码,筛选出所有原数组中位置靠前的元素与位置靠后的元素的组合; - 利用
boolean_mask提取符合条件的索引对,最后通过tf.gather根据索引从原数组中取出对应元素,得到目标结果。
运行后输出的张量即为:tf.Tensor([[11 0] [11 7] [11 1] [ 0 7] [ 0 1] [ 7 1]], shape=(6, 2), dtype=int32),完全匹配需求。
内容的提问来源于stack exchange,提问作者Anto
相关产品推荐
相关产品推荐

