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

R Случайный выбор ячеек матрицы и цикла

У меня есть две матрицы 3x3, и я хотел бы случайным образом выбрать элемент из каждой строки (один и тот же соответствующий элемент в обеих матрицах) и записать эти «выбранные» значения в новую матрицу.

Оттуда я хотел бы повторить этот процесс 5 раз, каждый раз добавляя к матрице, чтобы в итоге у меня была матрица 3x10 случайно выбранных значений.

Я попытаюсь проиллюстрировать, что я имею в виду:

У меня есть две матрицы А и В.

> A = matrix( c(4,7,1,9,4,2,1,3,9), nrow = 3, ncol = 3)
> A
     [,1] [,2] [,3]
[1,]    4    9    1
[2,]    7    4    3
[3,]    1    2    9
> B = matrix( c(2, 4, 3, 1, 5, 7, 4, 3, 2), nrow=3, ncol=3) 
> B
     [,1] [,2] [,3] 
[1,]    2    1    4
[2,]    4    5    3
[3,]    3    7    2

Затем я хочу случайным образом выбрать целое число от 1 до 3 (потому что в каждой из матриц есть 3 столбца)

> random <- sample(1:3, length)
> random
[1] 1 3 2

поскольку числа равны 1,3 и 2, я хочу создать вектор 1-го элемента строки 1, 3-го элемента строки 2 и 2-го элемента строки три из обеих матриц A и B. Это будет новая матрица С.

> C = matrix(c(4,3,2,2,3,7), nrow = 3, ncol = 2)
> C
     [,1] [,2]
[1,]    4    2
[2,]    3    3
[3,]    2    7

После этого я хотел бы зациклить процесс 5 раз, каждый раз добавляя созданную матрицу на сторону существующей матрицы «C».

Я новичок в R, поэтому мой вопрос: как мне включить случайный выбор и цикл для получения желаемого результата? Любая помощь или совет очень ценятся, спасибо.

(Я хотел бы воссоздать это в гораздо большем масштабе)


Ответы:


1

Вы могли бы попробовать

M <- cbind(c(t(A)), c(t(B)))
fnc <- function(){
  n <- nrow(A)
  ind <- sample(n) + (1:n-1)*n
  M[ind, ]
}
set.seed(0)
do.call(cbind, lapply(1:5, function(i)fnc()))
#      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# [1,]    1    4    9    1    1    4    9    1    4     2
# [2,]    7    4    3    3    4    5    7    4    4     5
# [3,]    2    7    1    3    1    3    9    2    9     2
13.07.2015
  • очень красиво и быстро +1 13.07.2015
  • @nongkrong Спасибо. Отредактировано, чтобы отразить ваше предложение. 13.07.2015
  • @ExperimenteR Спасибо. Работает отлично! 14.07.2015
  • @ExperimentR Как мне изменить код, если матрица не квадратная? Скажем, например, это матрица 3x2? 14.07.2015
  • изменить переменную индексации на ind <- sample(n) + (1:n-1)*ncol(A). 17.07.2015
  • Новые материалы

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

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

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

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

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

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

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