MATLAB: определение n подмножеств матрицы - PullRequest
2 голосов
/ 07 июля 2011

У меня есть вектор 1974x1, Upper, и я пытаюсь разбить информацию на отдельные массивы по 36 элементов в каждом. Итак, я использовал длину, чтобы найти 1974 элемента, а затем разделил на 36 и использовал функцию floor. Я не могу понять, как все это сделать с n.

Вот моя логика: я определяю n в попытке найти количество подмножеств, которые должны быть определены. Затем я пытаюсь, чтобы subsetn стал subset1, subset2, ..., subset36. Однако MATLAB определяет только подмножество матриц как матрицу 1x36. Однако эта матрица содержит то, что должно содержать подмножество 1 (1 ... 36). У вас есть какие-нибудь советы для новичка? Что я делаю не так?

binSize = 36;
nData = length(Upper);
nBins = floor(nData/36);
nDiscarded = nData  - binSize*nBins;

n=1:binSize;
subsetn= [(n-1)*binSize+1:n*binSize];

Ответы [ 2 ]

3 голосов
/ 07 июля 2011

Вы можете создать массив 54x36, где n th столбец - это ваше n th подмножество.

subsetArray=reshape(x(1:binSize*nBins),[],nBins);

Вы можете получить доступ к n th подмножеству как subsetArray(:,n)

1 голос
/ 07 июля 2011

Извините, если я неправильно понял, что вы хотите сделать.

Я думаю, что следующий маленький трюк может сделать то, что вы хотите (это глупо, но я не эксперт Matlab):

[a, b] = meshgrid(0:nBins-1, 0:binSize-1)
inds = a*binSize + b + 1

Теперь inds - это матрица индексов nBins * binSize. Вы можете индексировать Upper с этим как

Upper(inds)

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

Редактировать: увидев ответ Йоды, он лучше;)

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