Создание 2D массива от 1D выстраивает в MATLAB

Делает любой знает, существует ли способ произвести 2D массив из 1D массив, где строки в 2D сгенерированы путем повторения соответствующих элементов в 1D массив.

Т.е.:

1D array      2D array

  |1|       |1 1 1 1 1|
  |2|       |2 2 2 2 2|
  |3|  ->   |3 3 3 3 3|
  |4|       |4 4 4 4 4|
  |5|       |5 5 5 5 5|
5
задан Amro 5 February 2010 в 19:55
поделиться

4 ответа

Вы можете сделать это с помощью функции ПОВТОР :

>> A = (1:5).'

A =

     1
     2
     3
     4
     5

>> B = repmat(A,1,5)

B =

     1     1     1     1     1
     2     2     2     2     2
     3     3     3     3     3
     4     4     4     4     4
     5     5     5     5     5

РЕДАКТИРОВАТЬ: БОНУСНЫЙ ОТВЕТ! ;)

Для вашего примера, REPMAT - самая простая в использовании функция. Однако еще одна интересная функция, о которой следует знать, - это KRON , которую вы также можете использовать в качестве решения следующим образом:

B = kron(A,ones(1,5));

Для небольших векторов и матриц KRON может быть ] немного быстрее, но немного медленнее для больших матриц.

8
ответ дан 18 December 2019 в 09:07
поделиться

repmat(a, [1 n]), но также следует обратить внимание на meshgrid.

1
ответ дан 18 December 2019 в 09:07
поделиться

Если дерево является рекурсивно определенной структурой данных, которая может быть пустой или узлом с левым и правым поддеревьями (например, деревья поиска или куча), то естественное определение состоит в назначении 0 пустому дереву и 1 + высоты верхнего поддерева непустому дереву.

Если дерево является графом, то естественное определение является самым длинным путем от корня к листу, поэтому дерево только корня имеет 0 глубины. Обычно ты даже не считаешь пустые деревья в этом случае.

-121--2320265-

Высота дерева - это длина самого длинного пути к терминальному узлу в любом из его нижестоящих элементов.

Википедия говорит, что высота пустого дерева равна -1 . Я не согласен. Пустое дерево - это буквально просто дерево, содержащее один терминальный узел (нулевое или специальное значение, представляющее пустое дерево). Поскольку узел не имеет дочерних элементов, длина самого длинного пути должна быть пустой суммой = 0, а не -1.

Аналогично, непустое дерево имеет два дочерних элемента, поэтому по определению существует по крайней мере путь > = 1 к терминальному узлу.

Мы могли бы определить наше дерево следующим образом:

type 'a tree =
    | Node of 'a tree * 'a * 'a tree
    | Nil

let rec height = function
    | Node(left, x, right) -> 1 + max (height left) (height right)
    | Nil -> 0
-121--2320266-

В духе бонусных ответов, вот некоторые из моих собственных:

Пусть A = (1:5) '

  1. С помощью индексов [быстрее, чем repmat]:

     B = A (:, one (5,1
    
  2. Использование матричного внешнего продукта:

     B = A * единиц (1,5)
    
  3. Использование bsxfun () [не лучший способ выполнения]

     B = bsxfun (@ plus, A, нули (1,5))
    % # или
    B = bsxfun (@ times, A, единицы (1,5))
    
9
ответ дан 18 December 2019 в 09:07
поделиться

Вы можете попробовать что-то вроде:

a = [1 2 3 4 5]'
l = size(a)
for i=2:5
    a(1:5, i) = a(1:5)

Цикл просто продолжает добавлять столбцы в конец.

0
ответ дан 18 December 2019 в 09:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: