記事ディレクトリ
1つは、NumPyの概要です
NumPy(Numerical Python)は、Pythonのオープンソースの数値コンピューティング拡張機能です。このツールは、Python独自のネストリスト構造構造よりもはるかに効率的な大きな行列の保存と処理に使用できます。この構造は、行列の表現にも使用でき、多数の次元配列と行列操作をサポートします。さらに、アレイ操作用の多数の数学関数ライブラリも提供します。
NumPy配列は、Pythonの組み込みシーケンスよりもはるかに少ないメモリを使用し、配列操作はPythonのforループを必要とせず、もちろん計算効率も高くなります。
2つの多次元配列オブジェクト
NumPyのndarrayは、大規模なPythonデータセットを格納するための高速で柔軟なコンテナです。NumPy配列操作は、Pythonスカラー操作に似ています。
-
2行3列の2次元ランダム配列を作成します
-
ダブルス
-
自己追加
-
倍増操作を処理するためにPythonの2次元リストに変更すると、非常に面倒になります。デモは次のとおりです。
-
上記から、2次元リストに2を掛けると、各要素を2倍にするのではなく、要素数が2倍になり、2行3列から4行3列に拡張され、最初の2行は最後の2行とまったく同じであることがわかります。 。
-
正しいアプローチは次のとおりです。最初にネストされたリストの解析によって要素が2倍になった通常のリストを取得し、次に通常のリストを2次元のリストに変換します。
-
ndarrayは、同じタイプのデータの一般的な多次元コンテナです。つまり、アレイのすべての要素は同じタイプである必要があります。各配列には、各次元のサイズのタプルを表すshape属性と、配列のデータ型を記述するdtype属性があります。
3つ目は、NumPy多次元配列を作成する
1. array()関数を使用してNumPy配列を作成します
-
array()関数は、任意のシーケンスオブジェクトまたはその他の配列を受け入れます。
-
リストからNumPy1次元配列を作成します
-
ネストされたリストからNumPy2次元配列を作成します
-
ネストされたリストdata2によって生成される配列arr2は、3行4列の2次元配列です。関連情報は、shape、dtype、およびndim属性から取得できます。明示的に指定されていない限り、np.arrayは作成する配列のタイプを推測しようとします。データタイプはdtypeメタデータオブジェクトに保存されます。
2.NumPy配列を作成するための他の関数
- np.arrayの使用に加えて、0、1、空など、新しい配列を作成するための他の多くの関数があります。これらのメソッドを使用して、高次元の配列を作成し、タプルを渡して配列の形状を指定する必要があります。
(1)ゼロ関数を使用して、すべて0の要素を持つ配列を作成します
(2)ones関数を使用して、1つの要素すべてを含む配列を作成します
(3)空の関数を使用して配列を作成します
- np.emptyがすべて1またはすべて0の配列を返すと仮定すると、場合によっては、初期化されていないガベージ値が返されることがあります。
(4)arange関数は、Python組み込み関数範囲の配列値バージョンです。
- NumPyは数値計算に重点を置いています。指定されていない場合、整数のデフォルトタイプはint32であり、実数のデフォルトタイプはfloat64です。
- もちろん、アレイの作成時に必要に応じてアレイタイプを指定できます
3.配列関数テーブルを作成します
- asarray()関数
- zeros_like()与ones_like()関数数
- full()関数
- アイデンティティマトリックスの生成-eye()およびidentity()関数
4.配列要素のデータタイプ
- ndarray配列タイプはdtype属性に格納されます
- float64、倍精度実数、8バイト、64ビット
- float32、単一精度実数、4バイト、32ビット
- タイプ変換デモ
- もちろん、型変換が失敗することもあります
第四に、NumPyアレイの操作
NumPyアレイは、ユーザーがベクトル化と呼ぶforループなしでバッチデータ操作を実行できます。
1.アレイおよびアレイの算術演算
- 算術演算は同じサイズの配列に対して実行され、対応する演算は要素ごとに実行されます。
2.配列とスカラーの算術演算
- 配列と配列は4つの算術演算を実行できるだけでなく、配列とスカラーも4つの算術演算を実行できます
3.アレイとアレイ間の関係操作
- アレイとアレイは、算術演算を実行できるだけでなく、リレーショナル演算も実行できます。
4.配列とスカラー間の関係操作
- 配列やスカラーでさえ、リレーショナル操作を実行できます
5.放送の概要
- 異なるサイズのアレイで実行される操作は、ブロードキャストと呼ばれます。
5、基本的なインデックスとスライス
NumPy配列インデックス操作は豊富なトピックであり、配列のサブセットまたは単一の要素を選択するためのさまざまな方法があります。
1.NumPy一次元配列インデックスとスライス
- NumPyの1次元配列のインデックス作成操作は非常に単純で、表面的にはPythonのリストインデックス作成操作に似ています。
- NumPyでは、リストまたはスカラーをスライスに割り当てることができますが、Pythonのリストスライス(要素の数が1を超える)にスカラーを割り当てることはできません。
- NumPyアレイとPythonリストのスライスには別の違いがあります。NumPyアレイスライスは元のアレイの「ビュー」であり、ビューの変更は元のアレイに反映されます。
- 配列スライスの操作が元の配列に影響を与えないようにする場合は、copyメソッドを使用してスライスバックアップを生成できます。
2. NumPy2次元配列インデックスとスライス
- 2次元配列の場合、単一のインデックスは、arr2d [1]によってアクセスされる2番目の行[1、4、9]などの1次元配列にアクセスします。
- 2次元配列の要素にアクセスする方法は2つあります
6つの数学関数
- 合計を追加
- 差し引く
- かける
- 分割する
- パワー
- 残り
7つの統計関数
1.最大および最小関数-amax、amin
2.最大ptpと最小ptpの差関数を見つけます
3.統計的百分率関数-百分率
4.中央関数と平均関数の平均
5.加重平均関数-平均
6.分散関数varおよび標準偏差関数std
8、ソート機能-ソート
チームに5人の学生がいて、結果を次の表に示しているとします。NumPyを使用して、中国語、英語、および数学の平均、最小、最大、分散、および標準偏差をカウントします。次に、合計スコアに従って並べ替え、ランキングを取得して、スコアを出力します。
- プログラムの作成-StatisticResults.py
# -*- coding: utf-8 -*-
"""
Created on Thu Oct 22 18:01:53 2020
@author: howard
统计成绩
"""
import numpy as np
stutype = np.dtype({
'names': ['name', 'chinese', 'math', 'english'],
'formats': ['S32', 'i', 'i', 'i', 'i']})
students = np.array([('mike', 95, 80, 78),
('alice', 87, 90, 80),
('green', 93, 78, 72),
('brown', 89, 95, 84),
('brian', 60, 90, 89)], dtype=stutype)
chinese = students[:]['chinese']
math = students[:]['math']
english = students[:]['english']
def show(name, subject):
print("{} | {:^6.2f} | {:^6.1f} | {:^6.1f} | {:^6.2f} | {:^6.2f}".format(name, np.mean(subject),
np.amax(subject), np.amin(subject), np.var(subject), np.std(subject)))
print('科目 | 平均分 | 最高分 | 最低分 | 方差 | 标准差')
show('语文', chinese)
show('数学', math)
show('英语', english)
print()
print("姓名 | 语文 | 数学 | 英语 | 总分")
rankings = sorted(students, key=lambda x: x[1]+x[2]+x[3])
for ranking in rankings:
print("{:5s}|{:^6d}|{:^6d}|{:^6d}|{:^6d}".format(ranking['name'].decode('utf-8'), ranking['chinese'], ranking['math'], ranking['english'],
ranking['chinese'] + ranking['math'] + ranking['english']))
- プログラムを実行して結果を表示する
- 単一の件名に従って並べ替える場合は、np.sortメソッドを直接使用してorder属性値を指定できます。
- 数学スコアの昇順で実際にソートされていることがわかります:78、80、90、90、95
- 数学のスコアを降順で並べ替える場合は、次のようにします。
9つの拡張演習
1.タスク:2次元ランダム配列の絶対値を取得します
方法1、条件付きスライスを使用
方法2、np.abs()関数を使用する
2.タスク:3つの変数で線形方程式のシステムを解きます
{x + 2 y + 3 z = 14(1)2 x − 4 y + z = − 3(2)3 x + 5 y − 2 z = 7(3)\ begin {cases} x + 2y + 3z = 14&(1)\\ 2x -4y + z = -3&(2)\\ 3x + 5y-2z = 7&(3)\ end {cases} ⎩⎪⎨⎪⎧バツ+2 Y+3 z=1 42 x−4 Y+と=− 33 x+5 Y−2 z=7(1 )(2 )(3 )
# -*- coding: utf-8 -*-
"""
Created on Thu Oct 22 18:09:11 2020
@author: howard
求解三元一次方程组
"""
import numpy as np
A = np.array([[1, 2, 3],
[2, -4, 1],
[3, 5, -2]])
B = np.array([[14],
[-3],
[7]])
X = np.dot(np.linalg.inv(A), B)
print('x1 = {:.2f}\nx2 = {:.2f}\nx3 = {:.2f}'.format(X[0, 0], X[1, 0], X[2, 0]))
print()
X = np.linalg.inv(A).dot(B)
print('x1 = {:.2f}\nx2 = {:.2f}\nx3 = {:.2f}'.format(X[0, 0], X[1, 0], X[2, 0]))
print()
X = np.linalg.solve(A, B)
print('x1 = {:.2f}\nx2 = {:.2f}\nx3 = {:.2f}'.format(X[0, 0], X[1, 0], X[2, 0]))