[再版] numpy-ndarray

参照リンク:Pythonのnumpy.diagflat

numpyは、Pythonを使用したデータ分析に不可欠なサードパーティのライブラリであり、多くの科学計算ツールがnumpyに基づいて開発されています。 

ndarrayオブジェクトは、同じタイプの要素を格納するために使用される多次元配列であり、numpyの基本オブジェクトの1つであり、もう1つはfuncオブジェクトです。この記事の主な内容は次のとおりです。1。ndarrayオブジェクトの簡単な紹介;2。ndarrayオブジェクトの一般的な属性;3。ndarrayオブジェクトの作成方法;4。ndarray要素へのアクセス。その次元と各次元の要素の数は、形状によって決まります。 

1 numpy.ndarray() 

タイトルの関数はnumpyコンストラクターです。この関数を使用して、ndarrayオブジェクトを作成できます。コンストラクターには、次のオプションのパラメーターがあります。 

パラメータタイプ関数shapeint型多次元配列のタプル形状dtypeデータ型配列バッファの初期化に使用される要素のタイプオフセット配列の最初のデータの初期化に使用されるintバッファオフセットストライド各軸のint型タプル添え字は1ずつ増加し、データポインタがメモリ内で増加するバイト数です。順序「C」または「F」「C」:行が最初、「F」:列が最初例: 

>>> np.ndarray(shape =(2,3)、dtype = int、buffer = np.array([1,2,3,4,5,6,7])、offset = 0、order = "C ") 

array([[1、2、3]、

   [4、5、6]])

>>> np.ndarray(shape =(2,3)、dtype = int、buffer = np.array([1,2,3,4,5,6,7])、offset = 0、order = "F ")

array([[1、3、5]、

   [2、4、6]])

>>> np.ndarray(shape =(2,3)、dtype = int、buffer = np.array([1,2,3,4,5,6,7])、offset = 8、order = "C ") 

array([[2、3、4]、

   [5、6、7]])

 

2ndarrayオブジェクトの一般的な属性 

次に、ndarrayオブジェクトの最も一般的に使用される属性を紹介します 

T-Transpose、self.transpose()と同じように、次元が2未満の場合、自己サイズを返します-配列itemssize内の要素の数-配列内の単一要素のバイト長dtype-データ型オブジェクト配列要素のndim-配列形状の次元-配列データの形状-配列データをフラットに格納するpythonバッファオブジェクトを指します-配列の1次元イテレータimagを返します-配列の虚数部を返しますreal-配列の実数部を返しますnbytes-配列内のすべての要素のバイト長の例: 

>>> a = np.array(range(15))。reshape(3,5)

>>> a

array([[0、1、2、3、4]、

   [5、6、7、8、9]、

   [10、11、12、13、14]])

>>> aT

array([[0、5、10]、

   [1、6、11]、

   [2、7、12]、

   [3、8、13]、

   [4、9、14]])

>>> a.size

15

>>> a.itemsize

8

>>> a.ndim

2

>>> a.shape

(3、5)

>>> a.dtype

dtype( 'int64')

 

3ndarrayを作成します 

3.1配列 

配列関数を使用して、通常のPythonリストまたはタプルから配列を作成します。要素のタイプは、元のシーケンスの要素タイプによって決定されます。 

numpy.array(object、dtype = None、copy = True、order = None、subok = False、ndmin = 0)

 

例: 

>>> np.array([1、2、3])

array([1、2、3])

>>> np.array([[1、2]、[3、4]])

配列([[1、2]、

   [3、4]])

>>> c = array([[1,2]、[3,4]]、dtype = complex)

>>> c

array([[1。+ 0.j、2。+ 0.j]、 

   [3. + 0.j、4。+ 0.j]])

>>> a = np.array([1、2、3]、ndmin = 2)

>>> a

array([[1、2、3]])

>>> a.shape

(1、3)

>>> np.array(np.mat( '1 2; 3 4'))

配列([[1、2]、

   [3、4]])

>>> np.array(np.mat( '1 2; 3 4')、subok = True)

マトリックス([[1、2]、

[3、4]])

 

subokがTrueで、オブジェクトがndarrayのサブクラス(行列タイプなど)の場合、返される配列はサブクラスタイプを保持します 

3.21と0の級数関数 

配列を作成する前に、配列の次元と各次元の長さを決定している場合があります。現時点では、numpyの組み込み関数のいくつかを使用してndarrayを作成できます。例:関数onesはすべて1の配列を作成し、関数0はすべて0の配列を作成し、関数emptyはランダムな内容の配列を作成します。デフォルトでは、これらの関数で作成される配列のタイプはfloat64です。データタイプを指定する必要があります。アイドルdtypeパラメータが必要です。 

>>> a = np.ones(shape =(2、3))#配列の形状はタプルで指定できます

>>> a

array([[1.、1.、1。]、

   [1.、1.、1。]])

>>> a.dtype

dtype( 'float64')

>>> b = np.zeros(shape = [3、2]、dtype = np.int64)#配列の形状もリストで指定でき、配列の種類はここで指定します

>>> b

array([[0、0]、

   [0、0]、

   [0、0]])

>>> b.dtype

dtype( 'int64')

>>> c = np.empty((4,2))

>>> c

array([[0.00000000e + 000、0.00000000e + 000]、

   (6.92806325e-310、6.92806326e-310)、

   (6.92806326e-310、6.92806326e-310)、

   [0.00000000e + 000、0.00000000e + 000]])

 

上記の3つの関数は、既知の配列から同じ形状の3つの多次元配列(ones_like、zeros_like、empty_like)も作成します。使用法は次のとおりです。 

 >>> a = [[1,2,3]、[3,4,5]]

>>> b = np.zeros_like(a)

>>> b

array([[0、0、0]、

   [0、0、0]])

#他の2つの関数は使用法が似ています

 

配列を作成するための上記の関数に加えて、次のようないくつかの特別な関数があります。eye-対角線上にすべて1が付いた2次元配列を生成し、identity-完全な単位行列を生成します-固定値で満たされた配列を生成します。 –固定値で満たされた配列を生成し、指定された配列と同じ形状です。特に、目の関数のすべての1の対角位置には、次のように使用法を決定するためのパラメーターkがあります。 

>>> np.eye(3、k = 0)#k = 0、すべての1の対角線が主対角線です

array([[1.、0.、0。]、

   [0.、1.、0。]、

   [0.、0.、1。]])

>>> np.eye(3、k = 1)#k> 0、すべての1は、対応する位置まで斜め上向きに移動します

array([[0.、1.、0。]、

   [0.、0.、1。]、

   [0.、0.、0。]])

>>> np.eye(3、k = -1)#k <0、すべての1は、対応する位置まで斜め下に移動します

array([[0.、0.、0。]、

   [1.、0.、0。]、

   [0.、1.、0。]])

>>> np.identity(4)

array([[1.、0.、0.、0。]、

   [0.、1.、0.、0。]、

   [0.、0.、1.、0。]、

   [0.、0.、0.、1。]])

>>> np.full(shape =(2,2)、fill_value = 2)

array([[2.、2。]、

   [2.、2。]])

>>> np.full_like([[1,2,3]、[3,4,5]]、3)

array([[3、3、3]、

   [3、3、3]])

 

3.3 arange、linspace、logspace 

 arange関数は、Pythonのrange関数に似ています。初期値、最終値、およびステップサイズ(デフォルトのステップは1)を指定して配列を作成します。linspace関数は、初期値を指定して1次元配列を作成します。 、最終値、および要素数。logspace関数とLinspaceは、幾何学的シーケンスを作成することを除いて類似しており、1次元配列インスタンスでもあります。np.arange(0,10,2) 

 array([0、2、4、6、8])

 np.arange(0,10)

 array([0、1、2、3、4、5、6、7、8、9])

 例:linspace(0,10、20)

 array([0.、0.52631579、1.05263158、1.57894737、

 2.10526316、2.63157895、3.15789474、3.68421053、

 4.21052632、4.73684211、5.26315789、5.78947368、

 6.31578947、6.84210526、7.36842105、7.89473684、

 8.42105263、8.94736842、9.47368421、10。])

 例:ログスペース(0、10、10)

 array([1.00000000e + 00、1.29154967e + 01、1.66810054e + 02、

 2.15443469e + 03、2.78255940e + 04、3.59381366e + 05、

 4.64158883e + 06、5.99484250e + 07、7.74263683e + 08、

 1.00000000e + 10])

  

3.4fromstringおよびfromfunction 

 fromstring関数は、文字列からデータを読み取り、配列を作成します。fromfunction関数は、最初のパラメーターを関数として使用して各配列要素を計算し(関数オブジェクトまたはラムダ式を使用できます)、2番目のパラメーターはの形状のインスタンスです。配列:>>> s1 = "1,2,3,4,5"

 >>> np.fromstring(s1、dtype = np.int64、sep = "、")

    array([1、2、3、4、5])

 >>> s2 = "1.01 2.23 3.53 4.76"

 >>> np.fromstring(s2、dtype = np.float64、sep = "")

 array([1.01、2.23、3.53、4.76])

 >>> def func(i、j):

 ...リターン(i + 1)*(j + 1)

 ..。 

 >>> np.fromfunction(func、(9,9))

 array([[1.、2.、3.、4.、5.、6.、7.、8.、9。]、

 [2.、4.、6.、8.、10.、12.、14.、16.、18。]、

 [3.、6.、9.、12.、15.、18.、21.、24.、27。]、

 [4.、8.、12.、16.、20.、24.、28.、32.、36。]、

 [5.、10.、15.、20.、25.、30.、35.、40.、45。]、

 [6.、12.、18.、24.、30.、36.、42.、48.、54。]、

 [7.、14.、21.、28.、35.、42.、49.、56.、63。]、

 [8.、16.、24.、32.、40.、48.、56.、64.、72。]、

 [9.、18.、27.、36.、45.、54.、63.、72.、81。]])

 >>> np.fromfunction(lambda i、j:i + j、(3,3)、dtype = int)

 array([[0、1、2]、

 [1、2、3]、

 [2、3、4]])

  

上記の2つの関数に加えて、外部からデータを取得し、frombuffer、fromfile、fromiterなど、まだ使用されていないndarrayを作成するための同様の方法がいくつかあります。使用する場合は、詳細に記録します。 

4 ndarrayは、特別な2次元配列を作成します 

ndarrayは、2次元配列を作成するためのいくつかの特別な関数を提供します。numpyの行列は、2次元配列ndarrayをカプセル化した後のサブクラスです。ここで紹介する2次元配列の作成は、依然としてndarrayオブジェクトであり、行列サブクラスではありません。マトリックスの作成と操作については、以降の注記で詳しく説明します。表示を簡単にするために、今回もマトリックスを使用して、作成された2次元配列を表します。 

 diag関数は、行列の対角要素を返すか、対角行列を作成します。対角は、パラメーターkによって制御されます。diagflat関数は、入力を対角要素として受け取り、行列を作成します。対角は、パラメーターkによって制御されます。 tri関数を生成します。行列、特定の対角の下の要素はすべて1、残りはすべて0です。対角はパラメーターkによって制御されます。Tril関数は行列を入力し、行列の下三角行列を返します。境界下の三角形の対角はパラメーターkによって制御されます。triu関数はtrilに似ており、行列の上三角行列を返します。vander関数は、1次元配列を入力し、Vandermonde行列を返します。#diagusage

 >>> x = np.arange(9).reshape((3,3))

 >>> x

 array([[0、1、2]、

 [3、4、5]、

 [6、7、8]])

 >>> np.diag(x)

 array([0、4、8])

 >>> np.diag(x、k = 1)

 array([1、5])

 >>> np.diag(x、k = -1)

 array([3、7])

 >>> np.diag(np.diag(x))

 array([[0、0、0]、

  [0、4、0]、

  [0、0、8]])

  >> np.diag(np.diag(x)、k = 1)

  array([[0、0、0、0]、

  [0、0、4、0]、

  [0、0、0、8]、

  [0、0、0、0]])

  #diagflat使用法

  >> np.diagflat([[1,2]、[3,4]])

  array([[1、0、0、0]、

  [0、2、0、0]、

  [0、0、3、0]、

      [0、0、0、4]])

  >>例:diagflat([1,2,3]、k = -1)

  array([[0、0、0、0]、

  [1、0、0、0]、

  [0、2、0、0]、

  [0、0、3、0]])

  #tri

  >> np.tri(3,4、k = 1、dtype = int)  

  array([[1、1、0、0]、

  [1、1、1、0]、

  [1、1、1、1]])

  >> np.tri(3,4)

  array([[1.、0.、0.、0。]、

  [1.、1.、0.、0。]、

  [1.、1.、1.、0。]])

  #tril与triu

  >> x = np.arange(12).reshape((3,4))

  >> x

  array([[0、1、2、3]、

  [4、5、6、7]、

  [8、9、10、11]])

  >> np.tril(x、k = 1) 

  array([[0、1、0、0]、

  [4、5、6、0]、

  [8、9、10、11]])

  >> np.triu(x、k = 1) 

  array([[0、1、2、3]、

  [0、0、6、7]、

  [0、0、0、11]])

  #vander

  >> np.vander([2,3,4,5])

  array([[8、4、2、1]、

  [27、9、3、1]、

  [64、16、4、1]、

  [125、25、5、1]])

  >> np.vander([2,3,4,5]、N = 3)

  array([[4、2、1]、

  [9、3、1]、

  [16、4、1]、

  [25、5、1]])

  

5ndarray要素へのアクセス 

5.1一次元配列 

1次元のndarrayの場合、Pythonを使用して、組み込みリスト(整数インデックス、スライス、反復など)にアクセスできます。 

ndarrayスライスは、次の形式の組み込みリストスライスに似ています。 

頼む:インデックスを開始 

end:終了インデックス(この要素は含まれません) 

ステップ:間隔は注意を払う必要があります: 

 begは、インデックス0から開始することを意味する空にすることができます。endは、インデックス(最後の要素を含む)の終わりに到達することを意味する空にすることもできます。stepは、間隔が1であることを意味する空です。負のインデックス:のインデックス最後の要素は-1です。このステップから1を引きます。負のステップ:要素を後ろから前に取得します>>> x = np.arange(16)* 4

  >>> x

  array([0、4、8、12、16、20、24、28、32、36、40、44、48、52、56、60])

  >>> x [11]

  44

  >>> x [4:9]

  array([16、20、24、28、32])

  >>> x [:10:3​​]

  array([0、12、24、36])

  >>> x [0:13:2]

  array([0、8、16、24、32、40、48])

  >>> x [::-1]#逆配列

  array([60、56、52、48、44、40、36、32、28、24、20、16、12、8、4、0])

  >>> print [val for val in x] #iterate要素

  [0、4、8、12、16、20、24、28、32、36、40、44、48、52、56、60]

  

ndarrayのスライスによって返される配列内の要素は、元の配列要素のインデックスであることに特に注意してください。返された配列要素を変更すると、元の配列の値に影響します。 

     >>> x [:-1]

     array([0、5、10、15、20、25、30、35、40])

     >>> y = x [::-1]

     >>> y

     array([45、40、35、30、25、20、15、10、5、0])

     >>> y [0] = 100#yの最初の要素の値を変更します

     >>> y

     array([100、40、35、30、25、20、15、10、5、0])

     >>> x #x [-1]も変更されます(基本的に要素)

     array([0、5、10、15、20、25、30、35、40、100])

 

リストと同様の要素にアクセスする上記の方法に加えて、ndarrayには、リストを介してndarrayから取得する要素のインデックスを指定する方法があります。次に例を示します。 

     >>> x = np.arange(10)* 5

     >>> x

     array([0、5、10、15、20、25、30、35、40、45])

     >>> x [[0、2、4、5、9]]#インデックス0、2、4、5、9の要素を取得するように指定します

     array([0、10、20、25、45])

 

5.2多次元配列 

多次元ndarrayでは、各次元は軸と呼ばれます。ndarrayでは、軸軸が非常に重要です。ndarrayオブジェクトに対する多くの操作は、軸に基づいています。たとえば、sum、meanなどには、(この軸軸に対する特定の操作の)軸パラメーターがあります。詳細は後で紹介します。多次元配列の場合、各軸にインデックスがあるため、これらのインデックスはコンマで区切られます。次に例を示します。 

     >>> x = np.arange(0、100、5).reshape(4、5)

     >>> x

     array([[0、5、10、15、20]、

     [25、30、35、40、45]、

     [50、55、60、65、70]、

     [75、80、85、90、95]])

     >>> x [1,2]#最初の行、2番目の列

     35

     >>> x [1:4、3]#行1から行3までの列3のすべての要素

     array([40、65、90])

     >>> x [:、4]#すべての行のすべての4番目の列要素

     配列([20、45、70、95])

     >>> x [0:3、:]#行0から行3までのすべての列の要素

     array([[0、5、10、15、20]、

     [25、30、35、40、45]、

     [50、55、60、65、70]])

 

知っておく必要があるのは: 

 提供されたインデックスが軸の数より少ない場合、欠落しているインデックスはスライス全体を表します(その後ろの軸のみが欠落しています)。提供されたインデックスが:の場合、スライス全体を使用できることも意味します...代わりにいくつかの連続したもの:インデックス>>> x [1:3]#2番目の軸がありません

  array([[25、30、35、40、45]、

  [50、55、60、65、70]])

  >>> x [:、0:4]#最初の軸は次のとおりです:

  array([[0、5、10、15]、

  [25、30、35、40]、

  [50、55、60、65]、

  [75、80、85、90]])

  >>> x [...、0:4]#...は最初の軸のインデックスを表します

  array([[0、5、10、15]、

  [25、30、35、40]、

  [50、55、60、65]、

  [75、80、85、90]])

  

多次元配列の反復 

ndarrayのflat属性を使用して、配列内の各要素を反復処理できます。 

>>> x.flatのアイテムの場合:

...印刷物、

..。

0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95

 

[元のリンク(https://blog.csdn.net/scorpion_zs/article/details/52526310)

おすすめ

転載: blog.csdn.net/u013946150/article/details/113057701