#r #keras #reticulate
#r #keras #сетчатый
Вопрос:
для изменения формы массива я использую array_reshape() из пакета reticulate. Для некоторых целей мне нужен предварительно выделенный массив, состоящий только из NA. Теперь давайте посмотрим, что делает array_reshape().
data <- c(NA, NA, NA)
a <- as.array(data)
a <- reticulate::array_reshape(a, dim = c(1L, 1L, 3L), order = "F")
Результатом a является:
logi[1, 1, 1:3] TRUE TRUE TRUE
Чтобы получить сравнение для этого столбца-основной стиль упорядочения (в стиле Fortran), использование dim() приводит к другому результату
data <- c(NA, NA, NA)
a <- as.array(data)
dim(a) <- c(1L, 1L, 3L)
Результат a является ожидаемым:
logi[1, 1, 1:3] NA NA NA
После дальнейших тестов я обнаружил, что NA переводится в TRUE, если в массиве нет числового или буквенно-цифрового (например, символьного) значения. Если, например, числовое значение находится в массиве, все работает так, как ожидалось
data <- c(NA, NA, 3)
a <- as.array(data)
a <- reticulate::array_reshape(a, dim = c(1L, 1L, 3L), order = "F")
logi[1, 1, 1:3] NA NA 3
Но, если использовать логические значения и в массиве, результат будет
data <- c(NA, NA, FALSE)
a <- as.array(data)
a <- reticulate::array_reshape(a, dim = c(1L, 1L, 3L), order = "F")
logi[1, 1, 1:3] TRUE TRUE FALSE
На мой взгляд, это очень «опасно», потому что позже невозможно будет сделать различие, является ли исходное значение NA или логическим TRUE. Использование dim() всегда приводит к ожидаемым результатам.
PS: Я знаю, что внутренне NA обрабатывается как логическая константа длиной 1.
Есть ли у вас какие-либо подсказки или предложения по решению этой проблемы с изменением формы с помощью array_reshape ()?
Заранее спасибо
Комментарии:
1. Это может иметь отношение github.com/rstudio/reticulate/issues/197 и
data <- c(NA_real_, NA_real_, NA_real_)
выдает ожидаемое, но затемdata <- c(NA_real_, NA_real_, FALSE)
преобразуетFALSE
в0
, иdata <- c(NA_integer_, NA_integer_, NA_integer_)
это не очень хорошо.2. Спасибо за ваш ответ и предоставленную вами ссылку.