PackedSequence

See

pack_padded_sequence

./code/packed-sequence/main.cc
 1static void TestPadPackedSequence() {
 2  torch::Tensor t = torch::tensor({
 3      {{10, 20, 30}, {0, 0, 0}, {0, 0, 0}},
 4      {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}},
 5      {{-1, 2, 3}, {-4, 5, 6}, {0, 0, 0}},
 6  });
 7  torch::Tensor lengths = torch::tensor({1, 3, 2});
 8  torch::nn::utils::rnn::PackedSequence packed_seq =
 9      torch::nn::utils::rnn::pack_padded_sequence(
10          t, lengths, /*batch_first*/ true, /*enforce_sorted*/ false);
11  std::cout << "data: " << packed_seq.data() << "\n";
12  std::cout << "batch_sizes: " << packed_seq.batch_sizes() << "\n";
13  std::cout << "sorted_indices: " << packed_seq.sorted_indices() << "\n";
14  std::cout << "unsorted_indices: " << packed_seq.unsorted_indices() << "\n";
15}
16/*
17data:   1   2   3
18 -1   2   3
19 10  20  30
20  4   5   6
21 -4   5   6
22  7   8   9
23[ CPULongType{6,3} ]
24batch_sizes:  3
25 2
26 1
27[ CPULongType{3} ]
28sorted_indices:  1
29 2
30 0
31[ CPULongType{3} ]
32unsorted_indices:  2
33 0
34 1
35[ CPULongType{3} ]
36 */

The output is

./code/packed-sequence/main.cc
 1}
 2/*
 3data:   1   2   3
 4 -1   2   3
 5 10  20  30
 6  4   5   6
 7 -4   5   6
 8  7   8   9
 9[ CPULongType{6,3} ]
10batch_sizes:  3
11 2
12 1
13[ CPULongType{3} ]
14sorted_indices:  1
15 2