>  기사  >  백엔드 개발  >  Django에서 NumPy 배열을 JSON으로 직렬화할 수 없는 이유는 무엇입니까?

Django에서 NumPy 배열을 JSON으로 직렬화할 수 없는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-03 16:44:03836검색

Why Can't I Serialize a NumPy Array to JSON in Django?

NumPy 배열 및 JSON 직렬화: Enigma 공개

NumPy 배열 및 Django로 작업할 때 "NumPy"라는 암호 오류가 발생할 수 있습니다. 배열은 JSON 직렬화가 불가능합니다." 이 당황스러운 메시지는 NumPy 배열을 Django 컨텍스트 변수로 저장하고 웹페이지에 렌더링하려고 할 때 발생합니다.

이 문제를 이해하기 위해 JSON 직렬화의 영역을 탐구합니다. JSON(JavaScript Object Notation)은 데이터 교환 및 저장에 사용되는 널리 사용되는 데이터 형식입니다. 그러나 NumPy 배열은 다차원 배열이므로 JSON으로 직접 변환할 수 없습니다. 여기서 오류가 발생합니다.

해결 방법: .tolist() to the Rescue

이 문제를 해결하기 위해 '.tolist()'를 사용합니다. 방법. 이 메소드는 NumPy 배열을 중첩 목록으로 변환합니다. 배열과 달리 중첩된 목록은 JSON으로 직렬화될 수 있으므로 NumPy와 JSON 사이의 격차를 해소할 수 있습니다.

구현: 단계별 가이드

  1. NumPy, 코덱 및 json 가져오기:
<code class="python">import numpy as np
import codecs, json</code>
  1. NumPy 배열 만들기:
<code class="python">a = np.arange(10).reshape(2, 5) # a 2 by 5 array</code>
  1. 배열을 중첩 목록으로 변환 '.tolist()' 사용:
<code class="python">b = a.tolist() # nested lists with same data, indices</code>
  1. JSON 저장소의 파일 경로 정의:
<code class="python">file_path = "/path.json" ## your path variable</code>
  1. 중첩 목록 직렬화 JSON으로:
<code class="python">json.dump(b, codecs.open(file_path, 'w', encoding='utf-8'), 
          separators=(',', ':'), 
          sort_keys=True, 
          indent=4) ### this saves the array in .json format</code>

직렬화 해제: NumPy 배열 복구

JSON 파일에서 NumPy 배열을 복구하려면:

  1. JSON 파일을 문자열로 읽기:
<code class="python">obj_text = codecs.open(file_path, 'r', encoding='utf-8').read()</code>
  1. JSON 문자열을 중첩 목록으로 로드:
<code class="python">b_new = json.loads(obj_text)</code>
  1. 변환 중첩 목록을 NumPy 배열로 다시 변환:
<code class="python">a_new = np.array(b_new)</code>

결론

JSON 직렬화의 필요성을 이해하고 '.tolist()' 사용 방법을 사용하면 NumPy 배열과 Django 사이의 격차를 원활하게 메울 수 있습니다. 이를 통해 NumPy 배열을 컨텍스트 변수로 쉽게 저장하고 검색할 수 있어 웹 애플리케이션에 고급 데이터 조작 기능이 강화됩니다.

위 내용은 Django에서 NumPy 배열을 JSON으로 직렬화할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.