Как объединить отдельные измерения в многомерных массивах numpy - PullRequest
0 голосов
/ 11 апреля 2020
lows = np.array([0 for lead in range(10)])

temp_lows = np.array([[1 for points in range(12)] for lead in range(10)]) # Ones are only a placeholder. temp_lows is filled with random int (data)

for lead in range(10):
    lows[lead] = np.concatenate((lows[lead], temp_lows[lead]), axis=None)

После выполнения возвращается:

ValueError: установка элемента массива с последовательностью.

В основном я хочу, чтобы массив lows был большим массив, куда я добавляю меньшие временные массивы в соответствии с временем выполнения для каждой итерации (здесь не показано). Например, в итерации 1 я хочу, чтобы значения в temp_lows [0] добавлялись к минимумам [0], а значения в temp_lows [1] добавлялись к минимумам [1] и так далее. Проблема сейчас, я не могу найти решение для непрерывного добавления меньших массивов в нужном измерении.

РЕДАКТИРОВАТЬ 1: Мой вопрос не был точным. temp_lows содержит данные за определенное время выполнения, которое я назвал «ведущим». Теперь, для каждой итерации, я хочу, чтобы данные, которые я обработал в этой итерации (temp_lows), добавлялись в массив lows в нужное время выполнения, таким образом, чтобы был непрерывный список. Я буду использовать эти списки (от 0 до 9) для создания функции PDF.

Ответы [ 3 ]

0 голосов
/ 11 апреля 2020

Проблема здесь в том, что

np.concatenate((lows[lead], temp_lows[lead]), axis=None)

возвращает массив, и вы пытаетесь поместить этот результат в один слот элемента массива lows. Я не вижу в этом смысла, поскольку все строки одинаковы:

[0 1 1 1 1 1 1 1 1 1 1 1 1]

Существуют гораздо лучшие способы достижения результата, например:

>>> a = np.ones(shape=(10, 13), dtype=np.int64)
>>> a[:,0] -= 1
>>> a
[[0 1 1 1 1 1 1 1 1 1 1 1 1]
 [0 1 1 1 1 1 1 1 1 1 1 1 1]
 [0 1 1 1 1 1 1 1 1 1 1 1 1]
 [0 1 1 1 1 1 1 1 1 1 1 1 1]
 [0 1 1 1 1 1 1 1 1 1 1 1 1]
 [0 1 1 1 1 1 1 1 1 1 1 1 1]
 [0 1 1 1 1 1 1 1 1 1 1 1 1]
 [0 1 1 1 1 1 1 1 1 1 1 1 1]
 [0 1 1 1 1 1 1 1 1 1 1 1 1]
 [0 1 1 1 1 1 1 1 1 1 1 1 1]]
0 голосов
/ 11 апреля 2020

Вот правильный способ расширения списка:

In [311]: lows = [[0] for lead in range(10)] 
     ...: temp_lows = [[1 for points in range(12)] for lead in range(10)] 
     ...: for lead in range(5): 
     ...:     lows[lead].extend(temp_lows[lead]) 
     ...:                                                                                              
In [312]: lows                                                                                         
Out[312]: 
[[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
 [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
 [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
 [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
 [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
 [0],
 [0],
 [0],
 [0],
 [0]]
0 голосов
/ 11 апреля 2020

Может быть проще создать другой массив с окончательным ответом, подобным следующему:

>>> newLows = np.concatenate((lows[:,np.newaxis], temp_lows), axis=1)
>>> newLows
array([[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])

Я не уверен, что полностью следую логике c редактирования, возможно, некоторые фактические данные и ожидаемый результат поможет уточнить это. А пока, может быть, это больше похоже на то, что вы ищете?

>>> newLows = np.array([np.concatenate((lows[lead], temp_lows[lead]), axis=None) for lead in range(10)])
...   
>>> newLows
array([[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...