У меня есть Numpy массив формы держит много (200 в данном примере) монохроматического 64x64 пикселов изображения, таким образом, имеет форму:Numpy: разделение массива случайным образом
>>> a.shape
(200L, 1L, 64L, 64L)
Я хочу, чтобы разделить эти изображения в 3-х новых массивов , a1
, a2
, a3
, где они будут содержать 80%, 10%, 10% изображений, соответственно, и я делаю это следующим образом (я не хочу, чтобы они были последовательными в a
):
import numpy as np
import random
a = --read images from file--
a1 = numpy.empty((0,1,64,64))
a2 = numpy.empty((0,1,64,64))
a3 = numpy.empty((0,1,64,64))
for i in range(200): #200 is the number of images
temp = a[-1]
a = np.delete(a,-1,0)
rand = random.random()
if rand < 0.8:
a1 = np.append(a1,[temp],0)
elsif rand < 0.9:
a2 = np.append(a2,[temp],0)
else:
a3 = np.append(a3,[temp],0)
Я стараюсь подражать pop
и append
, которые выполняются при O(1)
времени в списках, но делает то же самое для массивов numpy? Есть ли способ сделать это более эффективно (быстрее) для большого количества (тысяч) изображений?
Ницца, простое решение, спасибо! Кажется достаточно быстрым с сложностью O (n) в моих простых тестах. Кстати, я знаю, что это не было в моем первоначальном вопросе, но как насчет памяти? Это заканчивается как 'a', так и разделенными частями в памяти, есть ли способ сделать это, не реплицируя' a'? – Cantfindname