сортировать элементы из массива 1d в треугольную матрицу

Я пытаюсь переместить элементы из массива 1d (55), состоящего из

array([1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3,
       4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4,
       5, 1, 2, 3, 4, 1, 2, 3, 1, 2, 1]).

Я хочу организовать этот массив 1d в виде следующего:

[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0],
 [0, 0, 0, 0],
 [0, 0, 0],
 [0, 0],
 [0]]

поэтому я хочу закончить с этим:

[[1, 2, 3, 4, 5, 6, 7, 8, 9, 0],
 [1, 2, 3, 4, 5, 6, 7, 8, 9],
 [1, 2, 3, 4, 5, 6, 7, 8],
 [1, 2, 3, 4, 5, 6, 7],
 [1, 2, 3, 4, 5, 6],
 [1, 2, 3, 4, 5],
 [1, 2, 3, 4],
 [1, 2, 3],
 [1, 2],
 [1]]

Каков наиболее эффективный способ сделать это? Также обратите внимание, что я хочу сделать это для большого массива из 325 тыс. элементов, чтобы организовать его в 807 отдельных строк.


person Tessd    schedule 27.07.2020    source источник
comment
Разве вы не можете сделать это со списками? Эффективность не должна быть вашей первоначальной целью. То, что вы ищете, не является многомерным массивом numpy.   -  person hpaulj    schedule 27.07.2020
comment
Numpy не принимает непрямоугольный массив. если вы настаиваете на элементах переменной длины, ваши элементы должны быть объектами, такими как списки. Другими словами, у вас не может быть многомерного массива, такого как опубликованный вами вывод.   -  person Ehsan    schedule 28.07.2020


Ответы (1)


Если вы точно знаете, сколько элементов вы хотите в первом ряду, вы можете сделать это.

import numpy as np

a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3,
       4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4,
       5, 1, 2, 3, 4, 1, 2, 3, 1, 2, 1])

b = []
index = 0

for i in range(10, 0, -1):
    b.append(a[index:index+i])
    index += i

for j in b:
    print(j)

который выведет это

[1 2 3 4 5 6 7 8 9 0]
[1 2 3 4 5 6 7 8 9]
[1 2 3 4 5 6 7 8]
[1 2 3 4 5 6 7]
[1 2 3 4 5 6]
[1 2 3 4 5]
[1 2 3 4]
[1 2 3]
[1 2]
[1]
person Luke B    schedule 27.07.2020