Each data[i].shape must start with the corresponding indices[i].shape, and the rest of data[i].shape must be constant w.r.t. i. That is, we must have data[i].shape = indices[i].shape + constant. In terms of this constant, the output shape is
merged.shape=[max(indices)]+constant
Values are merged in order, so if an index appears in both indices[m][i] and indices[n][j] for (m,i) < (n,j) the slice data[n][j] will appear in the merged result. If you do not need this guarantee, ParallelDynamicStitch might perform better on some devices.
This method can be used to merge partitions created by dynamic_partition as illustrated on the following example:
# Apply function (increments x_i) on elements for which a certain condition# apply (x_i != -1 in this example).x=tf.constant([0.1,-1.,5.2,4.3,-1.,7.4])condition_mask=tf.not_equal(x,tf.constant(-1.))partitioned_data=tf.dynamic_partition(x,tf.cast(condition_mask,tf.int32),2)partitioned_data[1]=partitioned_data[1]+1.0condition_indices=tf.dynamic_partition(tf.range(tf.shape(x)[0]),tf.cast(condition_mask,tf.int32),2)x=tf.dynamic_stitch(condition_indices,partitioned_data)# Here x=[1.1, -1., 6.2, 5.3, -1, 8.4], the -1. values remain# unchanged.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2022-09-07 UTC."],[],[],null,["# tensorflow::ops::DynamicStitch Class Reference\n\ntensorflow::ops::DynamicStitch\n==============================\n\n`#include \u003cdata_flow_ops.h\u003e`\n\nInterleave the values from the `data` tensors into a single tensor.\n\nSummary\n-------\n\nBuilds a merged tensor such that\n\n\n```transact-sql\n merged[indices[m][i, ..., j], ...] = data[m][i, ..., j, ...]\n```\n\n\u003cbr /\u003e\n\nFor example, if each `indices[m]` is scalar or vector, we have\n\n\n```transact-sql\n # Scalar indices:\n merged[indices[m], ...] = data[m][...]\n```\n\n\u003cbr /\u003e\n\n\n```transact-sql\n # Vector indices:\n merged[indices[m][i], ...] = data[m][i, ...]\n```\n\n\u003cbr /\u003e\n\nEach `data[i].shape` must start with the corresponding `indices[i].shape`, and the rest of `data[i].shape` must be constant w.r.t. `i`. That is, we must have `data[i].shape = indices[i].shape + constant`. In terms of this `constant`, the output shape is \n\n```gdscript\nmerged.shape = [max(indices)] + constant\n```\n\n\u003cbr /\u003e\n\nValues are merged in order, so if an index appears in both `indices[m][i]` and `indices[n][j]` for `(m,i) \u003c (n,j)` the slice `data[n][j]` will appear in the merged result. If you do not need this guarantee, [ParallelDynamicStitch](/versions/r2.10/api_docs/cc/class/tensorflow/ops/parallel-dynamic-stitch#classtensorflow_1_1ops_1_1_parallel_dynamic_stitch) might perform better on some devices.\n\nFor example:\n\n\n```text\n indices[0] = 6\n indices[1] = [4, 1]\n indices[2] = [[5, 2], [0, 3]]\n data[0] = [61, 62]\n data[1] = [[41, 42], [11, 12]]\n data[2] = [[[51, 52], [21, 22]], [[1, 2], [31, 32]]]\n merged = [[1, 2], [11, 12], [21, 22], [31, 32], [41, 42],\n [51, 52], [61, 62]]\n```\n\n\u003cbr /\u003e\n\nThis method can be used to merge partitions created by `dynamic_partition` as illustrated on the following example:\n\n\n```gdscript\n # Apply function (increments x_i) on elements for which a certain condition\n # apply (x_i != -1 in this example).\n x=tf.constant([0.1, -1., 5.2, 4.3, -1., 7.4])\n condition_mask=tf.not_equal(x,tf.constant(-1.))\n partitioned_data = tf.dynamic_partition(\n x, tf.cast(condition_mask, tf.int32) , 2)\n partitioned_data[1] = partitioned_data[1] + 1.0\n condition_indices = tf.dynamic_partition(\n tf.range(tf.shape(x)[0]), tf.cast(condition_mask, tf.int32) , 2)\n x = tf.dynamic_stitch(condition_indices, partitioned_data)\n # Here x=[1.1, -1., 6.2, 5.3, -1, 8.4], the -1. values remain\n # unchanged.\n```\n\n\u003cbr /\u003e\n\n\n\u003cbr /\u003e\n\nArgs:\n\n- scope: A [Scope](/versions/r2.10/api_docs/cc/class/tensorflow/scope#classtensorflow_1_1_scope) object\n\n\u003cbr /\u003e\n\nReturns:\n\n- [Output](/versions/r2.10/api_docs/cc/class/tensorflow/output#classtensorflow_1_1_output): The merged tensor.\n\n\u003cbr /\u003e\n\n| ### Constructors and Destructors ||\n|---|---|\n| [DynamicStitch](#classtensorflow_1_1ops_1_1_dynamic_stitch_1a40683e2fafd5461794d620ec3ab75b02)`(const ::`[tensorflow::Scope](/versions/r2.10/api_docs/cc/class/tensorflow/scope#classtensorflow_1_1_scope)` & scope, ::`[tensorflow::InputList](/versions/r2.10/api_docs/cc/class/tensorflow/input-list#classtensorflow_1_1_input_list)` indices, ::`[tensorflow::InputList](/versions/r2.10/api_docs/cc/class/tensorflow/input-list#classtensorflow_1_1_input_list)` data)` ||\n\n| ### Public attributes ||\n|--------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------|\n| [merged](#classtensorflow_1_1ops_1_1_dynamic_stitch_1ab680171a95778bb5700d266c6d81263a) | `::`[tensorflow::Output](/versions/r2.10/api_docs/cc/class/tensorflow/output#classtensorflow_1_1_output) |\n| [operation](#classtensorflow_1_1ops_1_1_dynamic_stitch_1aa293b5d370da3681d76bd21d745f63b3) | [Operation](/versions/r2.10/api_docs/cc/class/tensorflow/operation#classtensorflow_1_1_operation) |\n\n| ### Public functions ||\n|--------------------------------------------------------------------------------------------------------------------------|------------------------|\n| [node](#classtensorflow_1_1ops_1_1_dynamic_stitch_1a116487484247157a3a09e30862677040)`() const ` | `::tensorflow::Node *` |\n| [operator::tensorflow::Input](#classtensorflow_1_1ops_1_1_dynamic_stitch_1a7bea7f966421c8a58236ed192cde235f)`() const ` | |\n| [operator::tensorflow::Output](#classtensorflow_1_1ops_1_1_dynamic_stitch_1a71343c33e7d5cb4c7b9f8f68204520ff)`() const ` | |\n\nPublic attributes\n-----------------\n\n### merged\n\n```text\n::tensorflow::Output merged\n``` \n\n### operation\n\n```text\nOperation operation\n``` \n\nPublic functions\n----------------\n\n### DynamicStitch\n\n```gdscript\n DynamicStitch(\n const ::tensorflow::Scope & scope,\n ::tensorflow::InputList indices,\n ::tensorflow::InputList data\n)\n``` \n\n### node\n\n```gdscript\n::tensorflow::Node * node() const \n``` \n\n### operator::tensorflow::Input\n\n```gdscript\n operator::tensorflow::Input() const \n``` \n\n### operator::tensorflow::Output\n\n```gdscript\n operator::tensorflow::Output() const \n```"]]