Nano Hash - криптовалюты, майнинг, программирование

Заполнение массива построчно последовательностью чисел в r

Я работаю в программе r и мне нужна помощь в написании кода. У меня есть размерный массив 50 на 3 на 8. Большинство ячеек в этом массиве равны нулю, но некоторые из них — NA. Мне нужно заменить нули в массиве последовательностью чисел, чтобы все ячейки в строке имели одинаковый номер. Последовательность начинается с 1 и продолжается до общего количества строк в массиве. Кроме того, должны остаться NA, чтобы ячейки с NA не могли быть перезаписаны. Кроме того, некоторые строки все являются NA, поэтому последовательность строк будет не ровно 400 (50 x 8), а немного меньше. Я нашел информацию о том, как решить каждую часть этой проблемы, но я изо всех сил пытаюсь собрать все части вместе так, чтобы это работало. Я очень ценю вашу помощь в написании этого кода r.
Пример для этого массива:
y‹-array(0,dim=c(10,3,2))
#add NAs
y[4,2:3,1]‹ -NA
y[8,1:3,1]‹-NA
y[10,1:3,2]‹-NA
Мне нужно заменить 0 на такую ​​последовательность, что первый Матрица в массиве имеет строки, пронумерованные от 1 до 9 (все ячейки в строке 1 = 1, 2 = 2 и т. д., с оставленными NA). Матрица 2 будет иметь строки с номерами от 10 до 18.

29.11.2017

  • Было бы полезно привести меньший пример того, к чему именно вы стремитесь. Я предполагаю, что вы могли бы объяснить проблему также с помощью простого двумерного массива, например, значений 4x3. Кроме того, пожалуйста, будьте более конкретными в отношении информации о том, как решить каждую часть проблемы - вы можете использовать ссылки для этого. 30.11.2017

Ответы:


1

Насколько я могу судить, это то, что вы хотите (в небольшом масштабе для иллюстрации).

## Set up example data 
## (you should provide something like this in your question!!)
set.seed(47)
d = c(5, 2, 3)
x = array(sample(c(0, NA), size = prod(d), replace = T), dim = d)
# set a row to all na:
x[2, , ] = NA

Сначала мы находим строки, которые не все NA, и вычисляем последовательность замены. Затем мы делаем замену в простом цикле for.

r = ! apply(is.na(x), MARGIN = 1, all)
rows = which(r)
rn = seq_along(r[r])

for (i in seq_along(rows)) {
  x[rows[i], , ][x[rows[i], , ] == 0] = rn[i]
}

x
# , , 1
# 
#      [,1] [,2]
# [1,]   NA   NA
# [2,]   NA   NA
# [3,]   NA    2
# [4,]   NA   NA
# [5,]   NA   NA
# 
# , , 2
# 
#      [,1] [,2]
# [1,]    1   NA
# [2,]   NA   NA
# [3,]    2    2
# [4,]   NA    3
# [5,]   NA    4
# 
# , , 3
# 
#      [,1] [,2]
# [1,]    1    1
# [2,]   NA   NA
# [3,]   NA    2
# [4,]    3   NA
# [5,]   NA   NA

Если это не то, что вы хотите, уточните свой вопрос, предоставив образец ввода и соответствующий желаемый результат.


Адресация правок на вопрос, еще два метода: уродливый понятный способ и слишком умный способ:

# sample data
set.seed(47)
d = c(5, 2, 3)
x = array(sample(c(0, NA), size = prod(d), replace = T), dim = d)

# nested for loopsr
r = !apply(is.na(x), c(1, 3), all)
counter = 0
for (k in 1:dim(x)[3]) {
    for (i in 1:dim(x)[1]) {
        if(r[i, k]) {
            counter = counter + 1
            x[i, , k] = x[i, , k] + counter
        }
    }
}
x

# now the clever way
# reset the data
set.seed(47)
x = array(sample(c(0, NA), size = prod(d), replace = T), dim = d)

xm = matrix(aperm(x, c(1, 3, 2)), ncol = 2)
axm = ! apply(is.na(xm), 1, all)
xm = xm + cumsum(axm)
aperm(array(c(xm), dim = d[c(1, 3, 2)]), c(1, 3, 2))
# , , 1
# 
#      [,1] [,2]
# [1,]   NA   NA
# [2,]    1    1
# [3,]   NA    2
# [4,]   NA   NA
# [5,]   NA   NA
# 
# , , 2
# 
#      [,1] [,2]
# [1,]    3   NA
# [2,]   NA    4
# [3,]    5    5
# [4,]   NA    6
# [5,]   NA    7
# 
# , , 3
# 
#      [,1] [,2]
# [1,]    8    8
# [2,]   NA    9
# [3,]   NA   10
# [4,]   11   NA
# [5,]   NA   NA
29.11.2017
  • Спасибо за ваш вклад. Это почти то, что я ищу, однако последовательность чисел должна продолжаться по матрицам в массиве, а не начинаться заново с каждой матрицей. В вашем примере матрица 1 будет иметь строку 1 последовательности, матрица 2 будет иметь строки с номерами от 2 до 5 и строки матрицы 3 с номерами от 6 до 8. 30.11.2017
  • Как изменить этот код, чтобы ячейка в первой матрице массива была 1, а не 2? Не уверен, почему он получает 2 здесь. Спасибо за ваш вклад. 02.12.2017
  • Это дает 2, потому что нули в первой строке a[1, , ] получают 1, a[2, , ] все отсутствуют, поэтому там ничего нет, поэтому нули в a[3, , ] получают 2 (как я изначально интерпретировал вашу проблему). 02.12.2017
  • Да! Именно то, что я пытался сделать. Спасибо за вашу помощь в этом. Для меня это небольшой шаг вперед в использовании R. Я ценю ваше время. 05.12.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..