TensorFlow:如何获取tensor中每行的子数组

TensorFlow:如何获取tensor中每行的子数组,tensorflow,subset,tensor,Tensorflow,Subset,Tensor,我有以下代码: import numpy as np import tensorflow as tf series = tf.placeholder(tf.float32, shape=[None, 5]) series_length = tf.placeholder(tf.int32, shape=[None]) useful_series = tf.magic_slice_function(series, series_length) with tf.Session() as sess:

我有以下代码:

import numpy as np
import tensorflow as tf

series = tf.placeholder(tf.float32, shape=[None, 5])
series_length = tf.placeholder(tf.int32, shape=[None])
useful_series = tf.magic_slice_function(series, series_length)

with tf.Session() as sess:
    input_x = np.array([[1, 2, 3, 0, 0],
                        [2, 3, 0, 0, 0],
                        [1, 0, 0, 0, 0]])
    input_y = np.array([[3], [2], [1]])
    print(sess.run(useful_series, feed_dict={series: input_x, series_length: input_y}))
预期产出如下

[1,2,3],[2,3],[1]]

我试过几个函数,比如tf.gather、tf.slice。它们都不起作用。 什么是魔法切片功能?有点棘手:

import numpy as np
import tensorflow as tf

series = tf.placeholder(tf.float32, shape=[None, 5])
series_length = tf.placeholder(tf.int64)

def magic_slice_function(input_x, input_y):
    array = []
    for i in range(len(input_x)):
        temp = [input_x[i][j] for j in range(input_y[i])]
        array.extend(temp)
    return [array]

with tf.Session() as sess:
    input_x = np.array([[1, 2, 3, 0, 0],
                        [2, 3, 0, 0, 0],
                        [1, 0, 0, 0, 0]])

    input_y = np.array([3, 2, 1], dtype=np.int64)

    merged_series =  tf.py_func(magic_slice_function, [series, series_length], tf.float32, name='slice_func')

    out = tf.split(merged_series, input_y)
    print(sess.run(out, feed_dict={series: input_x, series_length: input_y}))
输出将是:

[array([ 1.,  2.,  3.], dtype=float32), array([ 2.,  3.], dtype=float32), array([ 1.], dtype=float32)]

可能,您需要在Tensorflow之外执行此操作,因为您想要获得的不是张量。