백엔드 개발 파이썬 튜토리얼 NumPy 간결한 튜토리얼에 대한 심층적인 이해---배열 1

NumPy 간결한 튜토리얼에 대한 심층적인 이해---배열 1

Feb 23, 2017 pm 04:50 PM

이 글에서는 NumPy(2. 배열 1)에 대한 심층적인 이해를 위한 간결한 튜토리얼을 주로 소개합니다. NumPy 배열은 다차원 배열 객체이며 관심 있는 친구들이 참고할 수 있습니다.

제가 현재 하고 있는 일은 Pyston(Dropbox에서 구현한 Python 컴파일러/인터프리터)에 NumPy를 도입하는 것입니다. 작업 과정에서 NumPy 소스 코드에 대해 심층적으로 접촉하고 구현을 이해했으며 NumPy 버그를 수정하기 위해 PR을 제출했습니다. NumPy 소스 코드와 NumPy 개발자를 다루는 과정에서 현재 중국어 NumPy 튜토리얼의 대부분이 번역되거나 영어 문서를 참조하므로 누락되는 부분이 많다는 것을 발견했습니다. 예를 들어 NumPy 배열의 브로드캐스트 기능은 거의 모든 중국어 문서에서 "브로드캐스트"로 번역됩니다. NumPy 개발자 중 한 명은 "broadcast는 복합어입니다. 영어 원어민은 "broad" + "cast" = "넓게 캐스트(scatter, distribution), 아마도 "cast(scatter, distribution) broadly"라고 생각합니다."라고 답했습니다. 아마도 (NumPy에서의 의미)"에 더 가까울 것입니다. 이를 고려하여 NumPy 사용법과 소스 코드 수준에 대한 이해를 바탕으로 일련의 튜토리얼을 작성하는 프로젝트를 시작할 계획입니다. >NumPy 배열


NumPy 배열은 ndarray라는 다차원 배열 개체입니다.

실제 데이터
  • <.>

    이러한 데이터를 설명하는 메타데이터

  • 대부분의 작업은 메타데이터만 대상으로 하며 기본 실제 데이터는 변경하지 않습니다. >NumPy 배열에 대해 알아야 할 몇 가지 사항이 있습니다.

NumPy 배열의 첨자는 0부터 시작합니다.

    모두 동일한 NumPy 배열에 있어야 합니다.
  • NumPy 배열을 자세히 소개하기 전에 먼저 NumPy 배열의 기본 속성을 소개하겠습니다. NumPy 배열의 차원을 랭크라고 합니다. 1차원 배열의 랭크는 1입니다. 배열은 2입니다. NumPy에서는 각 선형 배열을 축(axes)이라고 하며 실제로 순위는 축의 수를 나타냅니다. 예를 들어 2차원 배열은 2개의 1차원 배열과 같습니다. 첫 번째 1차원 배열은 동일합니다. 각 요소는 1차원 배열이므로 1차원 배열은 NumPy의 축(축)이고 두 번째 축은 숫자입니다.

  • NumPy의 더 중요한 ndarray 객체 속성은 다음과 같습니다.
  • ndarray.ndim: 배열의 차원(즉, 배열 축의 수), 가장 일반적인 것은 2차원 배열(행렬)입니다. 각 배열의 차원. 차원의 정수 튜플입니다. 예를 들어 2차원 배열에서는 배열의 "행 수"와 "열 수"를 나타내고 길이를 반환합니다. 이 튜플의 크기는 차원 수, 즉 ndim 속성입니다. 🎜>


    ndarray.size: 배열 요소의 총 개수는 모양 속성에 있는 튜플 요소의 곱과 같습니다. .

ndarray.dtype: 배열의 요소 유형을 나타내는 객체입니다. dtype은 표준 Python 유형을 사용하여 생성하거나 지정할 수 있습니다. 또한 이전 글에서 소개한 NumPy에서 제공하는 데이터 유형을 사용할 수도 있습니다.

ndarray.itemsize: 배열에 있는 각 요소의 바이트 크기입니다. 예를 들어, 요소 유형이 float64인 배열의 itemsiz 속성 값은 8입니다(float64는 64비트를 차지하고 각 바이트의 길이는 8이므로 64/8은 8바이트를 차지합니다). complex32. 배열 항목 속성은 4(32/8)입니다.

ndarray.data: 실제 배열 요소를 포함하는 버퍼입니다. 일반적으로 요소는 배열의 인덱스를 통해 획득되므로 일반적으로 이 속성을 사용할 필요가 없습니다.

  • 배열 만들기
  • 먼저 배열 만들기에 대해 소개하겠습니다. 배열을 만드는 방법에는 여러 가지가 있습니다. 예를 들어, array 함수를 사용하여 일반 Python 목록과 튜플에서 배열을 만들 수 있습니다. 생성된 배열의 유형은 원래 시퀀스의 요소 유형에서 파생됩니다. ​​
  • >>> from numpy import *     
    >>> a = array( [2,3,4] )    
    >>> a 
      array([2, 3, 4]) 
    >>> a.dtype 
      dtype(&#39;int32&#39;) 
    >>> b = array([1.2, 3.5, 5.1])    
    >>> b.dtype 
      dtype(&#39;float64&#39;)
    로그인 후 복사
  • 배열 함수를 사용하여 생성할 때 매개변수는 대괄호로 묶인 목록이어야 하며, 여러 값으로 배열을 호출할 수 없습니다. 매개변수로. ​

  • >>> a = array(1,2,3,4)  # 错误 
    >>> a = array([1,2,3,4]) # 正确
    로그인 후 복사

  • 이중 시퀀스를 사용하여 2차원 배열을 나타내고, 삼중 시퀀스를 사용하여 3차원 배열을 나타낼 수 있습니다.
  • >>> b = array( [ (1.5,2,3), (4,5,6) ] )   
    >>> b 
      array([[ 1.5, 2. , 3. ], 
          [ 4. , 5. , 6. ]])
    로그인 후 복사

배열을 생성할 때 배열의 요소 유형을 명시적으로 지정할 수 있습니다.

>>> c = array( [ [1,2], [3,4] ], dtype=complex) 
>>> c 
  array([[ 1.+0.j, 2.+0.j], 
     [ 3.+0.j, 4.+0.j]])
로그인 후 복사


일반적으로 처음에는 배열의 요소를 알 수 없지만 배열의 크기는 알고 있습니다. 따라서 NumPy는 자리 표시자를 사용하여 배열을 생성하기 위한 몇 가지 기능을 제공합니다. 이러한 함수는 높은 계산 오버헤드를 줄이는 동시에 배열 확장 요구 사항을 충족하는 데 도움이 됩니다.

모두 0으로 구성된 배열을 만들려면 함수 0을 사용하고, 모두 1로 구성된 배열을 만들려면 함수 1을 사용하고, 메모리 상태에 따라 임의의 내용이 포함된 배열을 만들려면 함수 비어 있습니다. 기본적으로 생성되는 배열 유형(dtype)은 float64입니다.

d.dtype.itemsize를 사용하여 배열의 요소가 차지하는 바이트 수를 확인할 수 있습니다.

>>> d = zeros((3,4)) 
>>> d.dtype 
dtype(&#39;float64&#39;) 
>>> d 
array([[ 0., 0., 0., 0.], 
    [ 0., 0., 0., 0.], 
    [ 0., 0., 0., 0.]]) 
>>> d.dtype.itemsize 
8
로그인 후 복사

배열의 요소 유형을 직접 지정할 수도 있습니다

>>> ones( (2,3,4), dtype=int16 ) #手动指定数组中元素类型 
   array([[[1, 1, 1, 1], 
       [1, 1, 1, 1], 
       [1, 1, 1, 1]], 
    
       [[1, 1, 1, 1], 
       [1, 1, 1, 1], 
       [1, 1, 1, 1]]], dtype=int16) 
>>> empty((2,3)) 
   array([[ 2.65565858e-316,  0.00000000e+000,  0.00000000e+000], 
       [ 0.00000000e+000,  0.00000000e+000,  0.00000000e+000]])
로그인 후 복사

NumPy提供一个类似arange的函数返回一个数列形式的数组:

>>> arange(10, 30, 5) 
  array([10, 15, 20, 25])
로그인 후 복사

以10开始,差值为5的等差数列。该函数不仅接受整数,还接受浮点参数: 

>>> arange(0,2,0.5) 
  array([ 0. , 0.5, 1. , 1.5])
로그인 후 복사

当arange使用浮点数参数时,由于浮点数精度有限,通常无法预测获得的元素个数。因此,最好使用函数linspace去接收我们想要的元素个数来代替用range来指定步长。linespace用法如下,将在通用函数一节中详细介绍。

>>> numpy.linspace(-1, 0, 5) 
    array([-1. , -0.75, -0.5 , -0.25, 0. ])
로그인 후 복사

数组中的元素是通过下标来访问的,可以通过方括号括起一个下标来访问数组中单一一个元素,也可以以切片的形式访问数组中多个元素。关于切片访问,将在切片一节介绍。

知识点:NumPy中的数据类型

对于科学计算来说,Python中自带的整型、浮点型和复数类型远远不够,因此NumPy中添加了许多数据类型。如下:

NumPy中的基本数据类型


NumPy中的基本数据类型
名称描述
bool用一个字节存储的布尔类型(True或False)
inti由所在平台决定其大小的整数(一般为int32或int64)
int8一个字节大小,-128 至 127
int16整数,-32768 至 32767
int32整数,-2 ** 31 至 2 ** 32 -1
int64整数,-2 ** 63 至 2 ** 63 - 1
uint8无符号整数,0 至 255
uint16无符号整数,0 至 65535
uint32无符号整数,0 至 2 ** 32 - 1
uint64无符号整数,0 至 2 ** 64 - 1
float16半精度浮点数:16位,正负号1位,指数5位,精度10位
float32单精度浮点数:32位,正负号1位,指数8位,精度23位
float64或float双精度浮点数:64位,正负号1位,指数11位,精度52位
complex64复数,分别用两个32位浮点数表示实部和虚部
complex128或complex复数,分别用两个64位浮点数表示实部和虚部

NumPy类型转换方式如下:

>>> float64(42) 
  42.0 
>>> int8(42.0) 
  42 
>>> bool(42) 
  True 
>>> bool(42.0) 
  True 
>>> float(True) 
  1.0
로그인 후 복사

许多函数的参数中可以指定参数的类型,当然,这个类型参数是可选的。如下:

>>> arange(7, dtype=uint16) 
  array([0, 1, 2, 3, 4, 5, 6], dtype=uint16)
로그인 후 복사

输出数组

当输出一个数组时,NumPy以特定的布局用类似嵌套列表的形式显示:

  • 第一行从左到右输出

  • 每行依次自上而下输出

  • 每个切片通过一个空行与下一个隔开

  • 一维数组被打印成行,二维数组成矩阵,三维数组成矩阵列表。 

>>> a = arange(6)             # 1d array 
>>> print a 
  [0 1 2 3 4 5] 
    
>>> b = arange(12).reshape(4,3)      # 2d array 
>>> print b 
  [[ 0 1 2] 
  [ 3 4 5] 
  [ 6 7 8] 
  [ 9 10 11]]    
>>> c = arange(24).reshape(2,3,4)     # 3d array 
>>> print c 
  [[[ 0 1 2 3] 
  [ 4 5 6 7] 
  [ 8 9 10 11]] 
    
  [[12 13 14 15] 
  [16 17 18 19] 
  [20 21 22 23]]]
로그인 후 복사

reshape将在下一篇文章中介绍 

如果一个数组太长,则NumPy自动省略中间部分而只打印两端的数据:   

>>> print arange(10000) 
   [  0  1  2 ..., 9997 9998 9999] 
    
>>> print arange(10000).reshape(100,100) 
   [[  0  1  2 ...,  97  98  99] 
    [ 100 101 102 ..., 197 198 199] 
    [ 200 201 202 ..., 297 298 299] 
    ..., 
    [9700 9701 9702 ..., 9797 9798 9799] 
    [9800 9801 9802 ..., 9897 9898 9899] 
    [9900 9901 9902 ..., 9997 9998 9999]]
로그인 후 복사

可通过设置printoptions参数来禁用NumPy的这种行为并强制打印整个数组。

set_printoptions(threshold=&#39;nan&#39;)
로그인 후 복사

这样,输出时数组的所有元素都会显示出来。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持PHP中文网。

更多深入理解NumPy简明教程---数组1相关文章请关注PHP中文网!


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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Linux 터미널에서 Python 버전을 볼 때 발생하는 권한 문제를 해결하는 방법은 무엇입니까? Linux 터미널에서 Python 버전을 볼 때 발생하는 권한 문제를 해결하는 방법은 무엇입니까? Apr 01, 2025 pm 05:09 PM

Linux 터미널에서 Python 버전을 보려고 할 때 Linux 터미널에서 Python 버전을 볼 때 권한 문제에 대한 솔루션 ... Python을 입력하십시오 ...

10 시간 이내에 프로젝트 및 문제 중심 방법에서 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법? 10 시간 이내에 프로젝트 및 문제 중심 방법에서 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법? Apr 02, 2025 am 07:18 AM

10 시간 이내에 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법은 무엇입니까? 컴퓨터 초보자에게 프로그래밍 지식을 가르치는 데 10 시간 밖에 걸리지 않는다면 무엇을 가르치기로 선택 하시겠습니까?

중간 독서를 위해 Fiddler를 사용할 때 브라우저에서 감지되는 것을 피하는 방법은 무엇입니까? 중간 독서를 위해 Fiddler를 사용할 때 브라우저에서 감지되는 것을 피하는 방법은 무엇입니까? Apr 02, 2025 am 07:15 AM

Fiddlerevery Where를 사용할 때 Man-in-the-Middle Reading에 Fiddlereverywhere를 사용할 때 감지되는 방법 ...

한 데이터 프레임의 전체 열을 Python의 다른 구조를 가진 다른 데이터 프레임에 효율적으로 복사하는 방법은 무엇입니까? 한 데이터 프레임의 전체 열을 Python의 다른 구조를 가진 다른 데이터 프레임에 효율적으로 복사하는 방법은 무엇입니까? Apr 01, 2025 pm 11:15 PM

Python의 Pandas 라이브러리를 사용할 때는 구조가 다른 두 데이터 프레임 사이에서 전체 열을 복사하는 방법이 일반적인 문제입니다. 두 개의 dats가 있다고 가정 해

Uvicorn은 Serving_forever ()없이 HTTP 요청을 어떻게 지속적으로 듣습니까? Uvicorn은 Serving_forever ()없이 HTTP 요청을 어떻게 지속적으로 듣습니까? Apr 01, 2025 pm 10:51 PM

Uvicorn은 HTTP 요청을 어떻게 지속적으로 듣습니까? Uvicorn은 ASGI를 기반으로 한 가벼운 웹 서버입니다. 핵심 기능 중 하나는 HTTP 요청을 듣고 진행하는 것입니다 ...

Inversiting.com의 크롤링 메커니즘을 우회하는 방법은 무엇입니까? Inversiting.com의 크롤링 메커니즘을 우회하는 방법은 무엇입니까? Apr 02, 2025 am 07:03 AM

Investing.com의 크롤링 전략 이해 많은 사람들이 종종 Investing.com (https://cn.investing.com/news/latest-news)에서 뉴스 데이터를 크롤링하려고합니다.

문자열을 통해 객체를 동적으로 생성하고 방법을 파이썬으로 호출하는 방법은 무엇입니까? 문자열을 통해 객체를 동적으로 생성하고 방법을 파이썬으로 호출하는 방법은 무엇입니까? Apr 01, 2025 pm 11:18 PM

파이썬에서 문자열을 통해 객체를 동적으로 생성하고 메소드를 호출하는 방법은 무엇입니까? 특히 구성 또는 실행 해야하는 경우 일반적인 프로그래밍 요구 사항입니다.

See all articles