Создание 2D-списков в python с индексированными векторами переменной длины

Я работаю над проблемой обработки изображений, где у меня есть код, который выглядит так (приведенный ниже код просто иллюстрирует проблему, которую я хочу решить):

for i in range(0,10): for j in range(0,10): number_length = round(random.random()*10) a = np.zeros(number_length) Z[i][j] = a 

Я хочу создать какой-то 2D-список или np.array (не совсем уверен), где я по существу индексирую термин для каждого пикселя в изображении и имею вектор / список значений для каждого отдельного пикселя, который я могу кроме того, длина каждого вектора для каждого индексированного пикселя отличается друг от друга. Каков наилучший способ сделать это?

В моем коде MATLAB обходной путь прост: я определяю двумерную ячейку и просто назначаю любой вектор любому элементу в двумерной ячейке. Поскольку клетки не жалуются на когерентную длину каждого проиндексированного вектора, это хорошо. Каково эквивалентное оптимальное решение для обработки этого в python?

В идеале это решение не должно предполагать максимальную длину «a» для любого пикселя и сделать все индексированные векторы одинаковой длины (так как это означает, что я должен выполнить нулевое заполнение, которое будет потреблять память, если индексированные векторы являются большими размерными и эти большие размерные векторы разрежены по изображению).

One Solution collect form web for “Создание 2D-списков в python с индексированными векторами переменной длины”

Массив NumPy не будет работать, поскольку он требует фиксированных размеров. Вы можете использовать список 2d (т. Е. Список списков), где каждый элемент может быть массивом произвольной длины. Это аналогично вашей настройке в Matlab, используя 2d-ячейки массива векторов.

Попробуй это:

 z = [[np.zeros(np.random.randint(10)+1) for j in range(10)] for i in range(10)] 

Это создает список 10×10, где z [i] [j] – массив нулей NumPy со случайной длиной (от 1 до 10).

Изменить (вложенные циклы, запрошенные в комментарии):

 z = [[None for j in range(10)] for i in range(10)] for i in range(len(z)): for j in range(len(z[i])): z[i][j] = np.zeros(np.random.randint(10)+1) 
  • Что эквивалентно серфингу Matlab (x, y, z, c) в matplotlib?
  • Как создать матричный массив Matlab из scipy.io?
  • симулятор реалистичного сигнала ЭКГ из данных rr для matlab или python
  • Получение сетки матрицы с помощью логической индексации в Numpy
  • Эквивалент Matlab 'ismember' в numpy (Python)?
  • как извлечь границы изображения (изображение сканирования OCT / сетчатки)
  • Матричный массив Matlab для python
  • Расчет собственных значений Python выполняется намного медленнее, чем вычисления MATLAB на моем компьютере. Зачем?
  • Python - лучший язык программирования в мире.