답변:
목록에 다양한 수의 요소가 포함 된 목록이 있으면 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
.
어쨌든 ... 나는 hstack
Numpy를 우아하게 사용하기위한 접근법을 선호합니다 .
다시 말하지만, 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
[...[...[...]]]
부품이 필요하지 않습니다 . 로 전화 np.array
하면됩니다 ndmin=number-of-list-layers
. (내 경우에는 ndmin=number-of-list-layers-minus-1
어떤 이유로 든 추가 계층을 만들었습니다-조사해야 함)
np.array
가장 깊은 목록을 numpy 배열로 변환하는 대신 "포장"하는 것입니다.
나는 길이가 같은 목록을 가지고있었습니다. 그때조차도 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)))