Получение фиксированного объема данных в определенном порядке из массива

#python #arrays #matlab #deep-learning #resize

Вопрос:

У меня есть 1100 массивов разных размеров. Какой-то размер массива равен 44, а какой-то-26. Мой минимальный размер массива-19. Поэтому я хочу сделать их все одного размера. Я получу 19 данных из каждого массива. И я должен получить их в определенном порядке. Например, это очень просто, когда у меня массив 38-го размера. Поскольку 38/19 = 2, я могу регулярно получать данные с шагом 2. Но как мне действовать, если размер массива равен 44 или 33.

Комментарии:

1. Может быть, округлить (или выровнять) индекс после добавления шага?

Ответ №1:

Как уже предлагал @beaker, я рекомендую выбирать записи округлением, чтобы добиться упомянутого вами поведения, когда числа делятся равномерно, вы могли бы использовать это

 function ind = sample(cnt, len)
ind = linspace(1, len 1, cnt 1);
ind = round(ind(1:end-1));
end
 

Здесь sample возвращает индексы, которые затем можно использовать для выборки из этого массива, cnt — это количество выборок, которое вы хотите, и len длина массива, из которого вы хотите сделать выборку.

Комментарии:

1. Это как раз то, что мне было нужно. Огромное спасибо.

2. И могу я спросить, почему вы используете len 1 и cnt 1 вместо прямого использования len и cnt?

3. @pekolas linspace создает вектор, который включает начальное и конечное значения, но вы сказали, что захотите взять все остальные значения, если длины разделятся равномерно, например 0,2,4,6 , если вы хотите выбрать 4 из списка [0,1,2,3,4,5,6,7] . Это означает, что нам нужно отбросить последнее значение ( ind(1:end-1) ) и компенсировать это с помощью len 1 и cnt 1 . Чтобы понять, что происходит, просто удалите их 1 из кода и посмотрите, что вы получите!