Создание 2D массива из 1D массива в MATLAB - PullRequest
5 голосов
/ 05 февраля 2010

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

т.е:.

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|

Ответы [ 4 ]

9 голосов
/ 05 февраля 2010

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

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

  1. Использование индексов [быстрее, чем repmat]:

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

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

    B = bsxfun(@plus, A, zeros(1,5))
    %# or
    B = bsxfun(@times, A, ones(1,5))
    
8 голосов
/ 05 февраля 2010

Вы можете сделать это, используя функцию REPMAT :

>> 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 может быть немного быстрее, но для более крупных матриц это немного медленнее.

1 голос
/ 05 февраля 2010

repmat (a, [1 n]), но вы также должны взглянуть на meshgrid .

0 голосов
/ 05 февраля 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...