numpy 배열의 목록 목록 어떻게 변환합니까? 행은 개별 하위 목록이며

간단한 목록을 numpy 배열로 어떻게 변환합니까? 행은 개별 하위 목록이며 각 행은 하위 목록의 요소를 포함합니다.



답변

목록에 다양한 수의 요소가 포함 된 목록이 있으면 Ignacio Vazquez-Abrams의 답변이 작동하지 않습니다. 대신 3 가지 이상의 옵션이 있습니다.

1) 배열 배열을 만듭니다.

x=[[1,2],[1,2,3],[1]]
y=numpy.array([numpy.array(xi) for xi in x])
type(y)
>>><type 'numpy.ndarray'>
type(y[0])
>>><type 'numpy.ndarray'>

2) 목록 배열을 만듭니다.

x=[[1,2],[1,2,3],[1]]
y=numpy.array(x)
type(y)
>>><type 'numpy.ndarray'>
type(y[0])
>>><type 'list'>

3) 먼저 목록의 길이를 동일하게 만드십시오.

x=[[1,2],[1,2,3],[1]]
length = max(map(len, x))
y=numpy.array([xi+[None]*(length-len(xi)) for xi in x])
y
>>>array([[1, 2, None],
>>>       [1, 2, 3],
>>>       [1, None, None]], dtype=object)

답변

>>> numpy.array([[1, 2], [3, 4]])
array([[1, 2], [3, 4]])

답변

이것은 목록 목록을 Numpy 배열로 변환하는 Google의 최고 검색이므로 4 세라는 질문에도 불구하고 다음을 제공합니다.

>>> x = [[1, 2], [1, 2, 3], [1]]
>>> y = numpy.hstack(x)
>>> print(y)
[1 2 1 2 3 1]

내가 이런 식으로 처음 생각했을 때, 너무 간단해서 나 자신에 매우 만족했다. 그러나 더 큰 목록으로 타이밍을 정한 후에는 실제로 이렇게하는 것이 더 빠릅니다.

>>> y = numpy.concatenate([numpy.array(i) for i in x])
>>> print(y)
[1 2 1 2 3 1]

@Bastiaan의 답변 # 1은 단일 연속 목록을 만들지 않으므로을 추가했습니다 concatenate.

어쨌든 … 나는 hstackNumpy를 우아하게 사용하기위한 접근법을 선호합니다 .


답변

다음과 같이 간단합니다.

>>> lists = [[1, 2], [3, 4]]
>>> np.array(lists)
array([[1, 2],
       [3, 4]])

답변

다시 말하지만, N 레벨의 중첩 목록을 N 차원 배열로 변환하는 문제를 검색 한 후에는 아무것도 찾지 못했습니다.

import numpy as np

new_array=np.array([[[coord for coord in xk] for xk in xj] for xj in xi], ndmin=3) #this case for N=3

답변

나는 길이가 같은 목록을 가지고있었습니다. 그때조차도 Ignacio Vazquez-Abrams대답이 나에게 적합하지 않았습니다. 요소가 목록 인 1-D numpy 배열이 있습니다. 같은 문제가 발생하면 아래 방법을 사용할 수 있습니다

사용하다 numpy.vstack

import numpy as np

np_array = np.empty((0,4), dtype='float')
for i in range(10)
     row_data = ...   # get row_data as list
     np_array = np.vstack((np_array, np.array(row_data)))

답변

그냥 팬더를 사용하십시오

list(pd.DataFrame(listofstuff).melt().values)

이것은 목록 목록에서만 작동합니다.

당신이 목록의 목록을 가지고 있다면 당신은의 라인을 따라 무언가를 시도 할 수

lists(pd.DataFrame(listofstuff).melt().apply(pd.Series).melt().values)