Я пытаюсь выяснить, как получить все диагонали матрицы. Например, у меня есть следующая матрица: < - матрица (1: 16,4)Получить все диагональные векторы из матрицы
с помощью функции diag(A)
вернет
[1] 1 6 11 16
В дополнение к основной диагонали, я хотел бы список всех диагоналей выше и ниже.
5 10 15
2 7 12
9 14
3 8
4
13
Я нашел ссылку https://stackoverflow.com/a/13049722, которая дает мне диагонали непосредственно выше и ниже основной один, но я не могу показаться, чтобы выяснить, как продлить код, чтобы получить остальную часть их для любой матрицы размера. Я попробовал два вложенных цикла, так как кажется, что какой-то прирост матричных индексов даст результат, который я ищу. Я пробовал использовать ncol (A), nrow (A) в циклах for, но, похоже, не мог найти правильную комбинацию. Кроме того, я знаю, что для петли, как правило, с неодобрением в R.
Код дано было:
diag(A[-4,-1])
diag(A[-1,-4])
, который вернул две диагонали, как верхняя и нижняя
Конечно, это квадрат матрица и не все матрицы, которые я хочу выполнить, будут квадратными. В случае необходимости заполнение неквадратной площади НО. Ответ, который мне нужен, может быть в одном из других ответов на странице, но исходный вопрос включает в себя средства, суммы и т. Д., Которые добавили уровень сложности, превышающий то, что я пытаюсь сделать. У меня такое чувство, что решение этого будет смехотворно простым, но для меня это просто не происходит. Я также удивлен, что я не мог найти этот вопрос нигде на SO, это, казалось бы, довольно распространенный вопрос. Может быть, я не знаю правильной терминологии для этой проблемы.
Почему вы не смотрите на ответ @ GavinSimpson? – A5C1D2H2I1M1N2O1R2T1
Я также прочитал этот ответ, поэтому я понимаю, что решение включает в себя увеличение в зависимости от количества строк и столбцов, однако как упаковать его как функцию, которая возвращает все диагонали в одной матрице, это то, что уклоняется от меня здесь. Я читал все ответы неоднократно. – Beaker
Боковое примечание: петли 'for' не смущены. Это миф (ИМО). Они находятся по всему исходному коду. Они просто должны использоваться надлежащим образом, как и любая другая функция. :-) –