#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
из кода и посмотрите, что вы получите!