You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

slice_op.cc 1.7 kB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /**
  2. * Copyright 2020 Huawei Technologies Co., Ltd
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. #include "dataset/kernels/data/slice_op.h"
  17. #include "dataset/core/tensor.h"
  18. #include "dataset/kernels/tensor_op.h"
  19. namespace mindspore {
  20. namespace dataset {
  21. Status SliceOp::Compute(const std::shared_ptr<Tensor> &input, std::shared_ptr<Tensor> *output) {
  22. IO_CHECK(input, output);
  23. CHECK_FAIL_RETURN_UNEXPECTED(input->shape().Rank() == 1, "SliceOp supports 1D Tensors only for now.");
  24. // if `all` flag is true, output is just the input.
  25. if (all_) {
  26. *output = input;
  27. return Status::OK();
  28. }
  29. // if slice object was provided, indices should be empty. Generate indices from the slice object.
  30. if (slice_.valid() && indices_.empty()) {
  31. dsize_t len = input->shape()[0];
  32. std::vector<dsize_t> indices = slice_.Indices(len);
  33. return input->Slice(output, indices);
  34. }
  35. // if indices are not empty, slices should be invalid, use indices_ to slice
  36. if (!indices_.empty() && !slice_.valid()) {
  37. return input->Slice(output, indices_);
  38. }
  39. RETURN_STATUS_UNEXPECTED("The indexing parameters are invalid");
  40. }
  41. } // namespace dataset
  42. } // namespace mindspore