Как сохранить Arraylist переменного размера в массиве numpy (для целей кластеризации)?

 a=[]
 for (x,y,w,h) in faces:
    for (ex,ey,ew,eh) in eyes:
               cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
               a.append(eyes)        
               i+=1
 print(a)

eyes - это результат обнаружения от detectMultiScale с использованием eye_cascade (обнаружение внутри лица, но опущено).

Скажем, (ex, ey, ew, eh) - это 4 координаты, которые необходимо сохранить в массиве для каждой итерации этого цикла.

Результат для каждой итерации выглядит следующим образом: [54, 46, 90, 103] Но иногда это выглядит так: [[20 34 56 41], [34 56 78 89]]

Иногда значение (ex, ey, ew, eh) может быть до 4 значений массива в одном массиве.

Как мы можем хранить эти многомерные выходные данные в массиве numpy? Он не имеет фиксированного размера, иногда это массив из 4-х координат; иногда это массив из множества наборов по 4 координаты.

Лучше придерживаться списка

hpaulj 21.03.2018 11:03
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
26
1

Ответы 1

Соберите их в список, а затем объедините:

>>> out = []
>>> for i in range(5):
...     out.append(np.squeeze(np.full([i, 4], i))) # squeeze to make it more difficult
... 
>>> out
[array([], shape=(0, 4), dtype=int64), array([1, 1, 1, 1]), array([[2, 2, 2, 2],
       [2, 2, 2, 2]]), array([[3, 3, 3, 3],
       [3, 3, 3, 3],
       [3, 3, 3, 3]]), array([[4, 4, 4, 4],
       [4, 4, 4, 4],
       [4, 4, 4, 4],
       [4, 4, 4, 4]])]
>>> np.r_[('0,2,1', *out)]
array([[1, 1, 1, 1],
       [2, 2, 2, 2],
       [2, 2, 2, 2],
       [3, 3, 3, 3],
       [3, 3, 3, 3],
       [3, 3, 3, 3],
       [4, 4, 4, 4],
       [4, 4, 4, 4],
       [4, 4, 4, 4],
       [4, 4, 4, 4]])

Здесь мы используем «волшебный» конкатенатор r_; его первый аргумент '0,2,1' означает: объединить вдоль оси 0, сделать все 2D, если оси должны быть добавлены, существующие размеры начинаются с оси 1., поэтому [1, 1, 1, 1] перед объединением преобразуется в [[1, 1, 1, 1]].

Другие вопросы по теме