Как изменить или создать новый ndarray из списка - PullRequest
1 голос
/ 16 июня 2020

У меня есть значение X типа ndarray с shape: (40000, 2)

Второй столбец X содержит список из 50 чисел

Пример:

[17, [1, 2, 3, ...]], 
[39, [44, 45, 45, ...]], ...

I хотите преобразовать его в ndarray из shape (40000, 51):

первый столбец будет таким же

каждый элемент списка будет в своем собственном столбце.

для моего примера:

[17, 1, 2, 3, ....],
[39, 44, 45, 45, ...]

Как мне это сделать?

Ответы [ 3 ]

1 голос
/ 16 июня 2020
np.hstack((arr[:,0].reshape(-1,1), np.array(arr[:,1].tolist())))

Пример:

>>> arr
array([[75, list([90, 39, 63])],
       [20, list([82, 92, 22])],
       [80, list([12, 6, 89])],
       [79, list([11, 96, 74])],
       [96, list([26, 37, 65])]], dtype=object)
>>> np.hstack((arr[:,0].reshape(-1,1),np.array(arr[:,1].tolist()))).astype(int)
array([[75, 90, 39, 63],
       [20, 82, 92, 22],
       [80, 12,  6, 89],
       [79, 11, 96, 74],
       [96, 26, 37, 65]])
0 голосов
/ 16 июня 2020

Я определил исходный массив (с более короткими списками в столбце 1) как:

X = np.array([[17, [1, 2, 3, 4]], [39, [44, 45, 45, 46]]])

Для выполнения вашей задачи определите следующую функцию:

def myExplode(row):
    tbl = [row[0]]
    tbl.extend(row[1])
    return tbl

Затем примените ее к каждая строка:

np.apply_along_axis(myExplode, axis=1, arr=X)

Результат:

array([[17,  1,  2,  3,  4],
       [39, 44, 45, 45, 46]])
0 голосов
/ 16 июня 2020

Вы можете сделать это для каждой строки вашего ndarray, вот пример:

# X = [39, [44, 45, 45, ...]]
newX = numpy.ndarray(shape=(1,51))

new[0] = X[0] # adding the first element

# now the rest of elements
i = 0
for e in X[1] : 
    newX[i] = e
    i = i + 1

Вы можете сделать этот процесс как функцию и применить его следующим образом:

newArray = numpy.ndarray(shape=(40000,51))

i = 0
for x in oldArray :
    Process(newArray[i],x)
    i=i+1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...