NumPy 배열을 Python List 구조로 변환 하시겠습니까?


답변:


426

사용 tolist():

import numpy as np
>>> np.array([[1,2,3],[4,5,6]]).tolist()
[[1, 2, 3], [4, 5, 6]]

이것은 그들이 가질 수있는 numpy 유형 (예 : np.int32 또는 np.float32)의 값을 "가장 가까운 호환 가능한 Python 유형"(목록에서)으로 변환합니다. numpy 데이터 유형을 유지하려면 대신 배열에서 list ()를 호출하면 numpy 스칼라 목록이 표시 됩니다. (의견에 지적 해 주신 Mr_and_Mrs_D에게 감사합니다.)


6
목록이 float32 인 경우 s tolist로 변환합니다 floats-바람직하지 않습니다. 사용 list(myarray)으로이 문제가 발생하지 않습니다. 왜 선호해야 tolist합니까?
Mr_and_Mrs_D

1
@Mr_and_Mrs_D 배열에 부동 소수점이 있음에도 불구하고 결과 목록이 정수가 되길 원하십니까? 그것은 완전히 다른 질문의 일종입니다 ... 물론 float32 값에도 불구하고 모두 정수가 될 것이라고 지정해야합니다. 어쨌든, 당신이 그러한 상황을 myarray.astype(np.int32).tolist()겪고 있다면, 선택 하는 것이 옵션 일 것이라고 생각 합니다. (마지막으로 list(array_of_type_float32)시도했을 때 여기에 정수를주지 않습니다 ... 그래서 당신이 무엇을 요구하는지 모르겠습니다.)
Peter Hansen

1
나는 정수를 언급하지 않았다-시도float32_array = np.array([0.51764709], np.float32); print(float32_array.tolist()); print(list(float32_array))
Mr_and_Mrs_D

2
자, 하나는 [float]로 변환하고 다른 하나는 [np.float32]와 같이 numpy 스칼라 float32 유형을 계속 사용합니다. 좋아. 알아두면 좋지만, 각 경우에 따라 바람직한 지 아닌지 추측합니다. 가치가있는 것에 대해, 나는 일반적으로 누군가 (예 : OP)가 목록으로의 변환을 요청할 때 암시 적으로 일반 파이썬 데이터 유형의 목록을 의미합니다 (이 경우 부동 소수점 또는 정수). . 이것을 지적 해 주셔서 감사합니다. 이에 대한 메모를 포함하도록 답변을 편집했습니다.
피터 한센

그 라인을 따라 : np.array([[0, 'one'], ['two', 3]]).tolist() -> [['0', 'one'], ['two', '3']]
keithpjolley

11

numpy .tolist 메소드는 numpy 배열 모양이 2D 인 경우 중첩 된 목록을 생성합니다.

플랫 목록이 필요한 경우 아래 방법이 작동합니다.

import numpy as np
from itertools import chain

a = [1,2,3,4,5,6,7,8,9]
print type(a), len(a), a
npa = np.asarray(a)
print type(npa), npa.shape, "\n", npa
npa = npa.reshape((3, 3))
print type(npa), npa.shape, "\n", npa
a = list(chain.from_iterable(npa))
print type(a), len(a), a`

5

tolist()중첩 된 배열을 만난 경우에도 잘 작동합니다 (예 : 팬더) DataFrame.

my_list = [0,1,2,3,4,5,4,3,2,1,0]
my_dt = pd.DataFrame(my_list)
new_list = [i[0] for i in my_dt.values.tolist()]

print(type(my_list),type(my_dt),type(new_list))


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.