ホームページ バックエンド開発 Python チュートリアル 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 の開発者の 1 人は、「ブロードキャストは複合語です。英語を母国語とする人は、これが「ブロード」+「キャスト」=「広くキャスト (分散、配布) であると理解できます。おそらく、「ブロードキャスト (分散、配布)」だと思います。これを考慮して、NumPy の使用法とソース コード

NumPy 配列

の理解に基づいて、一連のチュートリアルを書くプロジェクトを開始する予定です。

NumPy 配列は、ndarray と呼ばれる多次元配列オブジェクトであり、次の 2 つの部分で構成されます:

  • 実際のデータ

  • これらのデータを説明するメタデータ

ほとんどの操作はメタデータのみに使用され、基になる実際のデータデータは変更されません。

NumPy 配列について知っておくべきことがいくつかあります:

  • NumPy 配列の添字は 0 から始まります。

  • 同じ NumPy 配列内のすべての要素の型は、同じです。


NumPy 配列を詳しく紹介する前に、まず NumPy 配列の基本的なプロパティを詳しく紹介しましょう。 1 次元配列の次元は 1、2 次元配列のランクは 2 などとなります。NumPy では、各線形配列は軸 (axes) と呼ばれ、実際にはランクは次の数を表します。たとえば、2 次元配列は 2 つの 1 次元配列と同等であり、最初の 1 次元配列の各要素は別の 1 次元配列であるため、NumPy では 1 次元配列が軸 (axes) になります。 、最初の軸は基になる配列に相当し、2 番目の軸は基になる配列内の配列に相当し、より重要な ndarray オブジェクトの次元になります。 NumPy のプロパティは次のとおりです:

ndarray.ndim: 配列の次元 (つまり、配列の軸の数) はランクに等しいです。最も一般的なのは 2 次元配列 (行列) です。 .shape: 配列の次元は、各次元の配列のサイズを表す整数タプルであり、次元配列では、配列の「行数」と「列数」を表します。タプル、このタプルの長さは ndim 属性です。合計数は

のタプル要素の積に等しくなります。 ndarray.dtype: 配列内の要素の型を表すオブジェクト。dtype を作成または指定するには、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('int32') 
    >>> b = array([1.2, 3.5, 5.1])    
    >>> b.dtype 
      dtype('float64')
    ログイン後にコピー
  • 配列関数を使用して作成する場合、パラメータは角括弧で囲まれたリストである必要があり、複数の値をパラメータとして配列を呼び出すことはできません。

>>> 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 の配列を作成するには関数 zeros を使用し、すべて 1 の配列を作成するには関数 one を使用し、ランダムな内容でメモリ状態に依存する配列を作成するには関数 empty を使用します。デフォルトで作成される配列型 (dtype) は float64 です。

d.dtype.itemsize を使用して、配列内の要素が占めるバイト数を確認できます。

>>> d = zeros((3,4)) 
>>> d.dtype 
dtype('float64') 
>>> 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='nan')
ログイン後にコピー

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? Apr 01, 2025 pm 05:09 PM

LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? Apr 01, 2025 pm 11:15 PM

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? Apr 02, 2025 am 07:18 AM

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? 中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? Apr 02, 2025 am 07:15 AM

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

正規表現とは何ですか? 正規表現とは何ですか? Mar 20, 2025 pm 06:25 PM

正規表現は、プログラミングにおけるパターンマッチングとテキスト操作のための強力なツールであり、さまざまなアプリケーションにわたるテキスト処理の効率を高めます。

uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? Apr 01, 2025 pm 10:51 PM

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

人気のあるPythonライブラリとその用途は何ですか? 人気のあるPythonライブラリとその用途は何ですか? Mar 21, 2025 pm 06:46 PM

この記事では、numpy、pandas、matplotlib、scikit-learn、tensorflow、django、flask、and requestsなどの人気のあるPythonライブラリについて説明し、科学的コンピューティング、データ分析、視覚化、機械学習、Web開発、Hの使用について説明します。

文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? 文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? Apr 01, 2025 pm 11:18 PM

Pythonでは、文字列を介してオブジェクトを動的に作成し、そのメソッドを呼び出す方法は?これは一般的なプログラミング要件です。特に構成または実行する必要がある場合は...

See all articles