Exposes the given data as a tensor without taking ownership of the original data. This routine will take an (i, j, k) array and return an (k, j, i) tensor.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(torch_tensor), | intent(out) | :: | tensor |
Returned tensor |
||
type(c_ptr), | intent(in) | :: | data |
Pointer to data |
||
integer(kind=c_int), | intent(in) | :: | ndims |
Number of dimensions of the tensor |
||
integer(kind=c_int64_t), | intent(in) | :: | tensor_shape(*) |
Shape of the tensor |
||
integer(kind=c_int), | intent(in) | :: | layout(*) |
Layout for strides for accessing data |
||
integer(kind=c_int), | intent(in) | :: | dtype |
Data type of the tensor |
||
integer(kind=c_int), | intent(in) | :: | device_type |
Device type the tensor will live on ( |
||
integer(kind=c_int), | intent(in), | optional | :: | device_index |
device index to use for |
|
logical(kind=c_bool), | intent(in), | optional | :: | requires_grad |
Whether gradients need to be computed for the created tensor |
subroutine torch_tensor_from_blob(tensor, data, ndims, tensor_shape, layout, dtype, & device_type, device_index, & requires_grad) use, intrinsic :: iso_c_binding, only : c_bool, c_int, c_int64_t, c_ptr type(torch_tensor), intent(out) :: tensor !! Returned tensor type(c_ptr), intent(in) :: data !! Pointer to data integer(c_int), intent(in) :: ndims !! Number of dimensions of the tensor integer(c_int64_t), intent(in) :: tensor_shape(*) !! Shape of the tensor integer(c_int), intent(in) :: layout(*) !! Layout for strides for accessing data integer(c_int), intent(in) :: dtype !! Data type of the tensor integer(c_int), intent(in) :: device_type !! Device type the tensor will live on (`torch_kCPU` or `torch_kCUDA`) integer(c_int), optional, intent(in) :: device_index !! device index to use for `torch_kCUDA` case logical(c_bool), optional, intent(in) :: requires_grad !! Whether gradients need to be computed for the created tensor integer(c_int) :: i !! loop index integer(c_int64_t) :: strides(ndims) !! Strides for accessing data integer(c_int) :: device_index_value !! device index used logical(c_bool) :: requires_grad_value !! Whether gradients need to be computed for the created tensor if (.not. present(requires_grad)) then requires_grad_value = logical(.false., c_bool) else requires_grad_value = requires_grad end if strides(layout(1)) = 1 do i = 2, ndims strides(layout(i)) = strides(layout(i - 1)) * tensor_shape(layout(i - 1)) end do ! Process optional arguments if (present(device_index)) then device_index_value = device_index else if (device_type == torch_kCPU) then device_index_value = -1 else device_index_value = 0 endif tensor%p = torch_from_blob_c(data, ndims, tensor_shape, strides, dtype, & device_type, device_index_value, & requires_grad_value) end subroutine torch_tensor_from_blob