導入
高度なアレイツール
インストール
pip インストール numpy
ドキュメントクエリ
https://numpy.org/doc/stable/reference/index.html
わかりやすい
- Numpy(数値Python)
- Numpy は非常に高速な数学ライブラリです。
- Numpy は ndarray と呼ばれる多次元配列オブジェクトです。
- Numpy は、Python 用のオープンソースの科学計算ツールキットであり、高度な数値プログラミング ツールです。
-
Numpy は、多数の次元配列および行列演算をサポートし、配列演算用の多数の数学関数ライブラリも提供します。線形代数、フーリエ変換、乱数生成などの演算を実行できます。
-
Numpy は、SciPy (科学 Python) および Matplotlib (プロット ライブラリ) と一緒によく使用されます。この組み合わせは、MatLab の代替として広く使用されており、強力な科学コンピューティング環境です。
もっと詳しく知る
【アドバンテージ】
-
n次元配列(行列)を作成します。
-
関数計算を使用して配列に対して関数演算を実行することは非常に高速であり、時間を大幅に節約でき、ループを記述する必要がないため、非常に便利です。
-
ndarray は、高速で省スペースな多次元配列です。
-
配列算術演算と高度なブロードキャスト関数を提供します。
【デメリット】
-
数値演算の場合、この構造はメモリと CPU リソースを無駄にします。
【応用】
-
ファイナンス:過去の大量のデータを比較分析することで、投資ポートフォリオのリスクを測定し、将来の傾向を分析するために使用されます。
-
統計分析: 生産価値の評価、特定の製品に適した人の割合に関する市場調査...
-
品質管理: 製品の寸法の変化を検出し、詳細を処理し、製品の品質を向上させます。
-
データ モデリング: 機械学習では、モデルの汎化能力を評価し、モデルの調整を支援します。'
【関連モジュール】
sciPy は、オープンソースの Python アルゴリズム ライブラリおよび数学ツールキットです。
sciPy には、最適化、線形代数、積分、補間、特殊関数、高速フーリエ変換、信号処理と画像処理、常微分方程式の解法、および科学と工学で一般的に使用されるその他の計算のためのモジュールが含まれています。
scipy には、科学計算における一般的な問題に特化したさまざまなツールボックスが含まれています。そのさまざまなサブモジュールは、補間、統合、最適化、画像処理、統計、特殊関数などのさまざまなアプリケーションに対応します。
Scipy は Python における科学技術計算の中核パッケージであり、numpy と組み合わせて使用することで初めてその効果を最大限に発揮できます。
パラメータリスト
配列 |
|
array(object, dtype=None, *, copy=True, order='K', subok=False, ndmin=0, like=None) |
|
物体 |
配列またはネストされたシーケンス |
dtype |
配列要素のデータ型 (オプション) |
コピー |
オブジェクトをコピーする必要があるかどうか (オプション) |
注文 |
配列のスタイルを作成します。C は行方向、F は列方向、A は任意の方向 (デフォルト) |
テストされた |
デフォルトでは、基本クラスと同じ型の配列が返されます。 |
NDMIN |
生成される配列の最小次元を指定します |
ビット演算 |
|
ビットごとの論理積 |
配列要素に対してビット単位の AND 演算を実行します。 |
ビットごとの論理和 |
配列要素に対してビット単位の OR 演算を実行します。 |
反転 |
ビット単位の否定 |
左方移動 |
バイナリ表現ビットを左にシフトします。 |
右シフト |
バイナリ表現ビットを右にシフトします |
文字列関数 |
|
追加() |
2 つの配列の文字列要素を 1 つずつ連結します |
かける() |
要素ごとの多重連結後の文字列を返します。 |
中心() |
中央の紐 |
大文字化() |
文字列の最初の文字を大文字に変換する |
タイトル() |
文字列の各単語の最初の文字を大文字に変換します |
より低い() |
配列要素を小文字に変換する |
アッパー() |
配列要素を大文字に変換する |
スプリット() |
区切り文字を指定して文字列を分割し、配列リストを返します |
分割線() |
要素内の行のリストを改行文字で区切って返します。 |
ストリップ() |
要素の先頭または末尾から特定の文字を削除する |
参加する() |
区切り文字を指定して配列内の要素を連結する |
交換する() |
文字列内のすべての部分文字列を新しい文字列に置き換えます |
参照コード
配列(基本的な方法)
import numpy
# 每个数组的长度必须一致
arr = numpy.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# print(arr) # >>> [[1 2 3][4 5 6][7 8 9]]
# print(type(arr)) # >>> <class 'numpy.ndarray'>
""" 数据类型(获取) """
# print(arr.dtype) # >>> int32
""" 数据类型(设置) """
# print(arr.astype(numpy.int64))
""" 几维数组 """
# print(arr.ndim) # >>> 2
""" 行列(互换) """
# print(arr.transpose()) # >>> [[1 4 7][2 5 8][3 6 9]]
# print(arr.T) # >>> [[1 4 7][2 5 8][3 6 9]]
""" 行列(转换) """
# print(arr.reshape(1,9)) # >>> [[1 2 3 4 5 6 7 8 9]]
""" 数组维度 """
# print(arr.shape) # >>> (3, 3) # 几行,几列
""" 内存信息 """
# print(arr.flags) # ndarray对象的内存信息。
""" 元素数量 """
# print(arr.size) # >>> 9
""" 字节大小 """
# print(arr.itemsize) # >>> 4 # 每个元素的字节大小
""" 复制数组 """
# arr_2 = arr.copy()
""" 创建数组 """
# print(numpy.array(range(5))) # >>> [0 1 2 3 4]
# print(numpy.array(range(5),dtype=float)) # >>> [0. 1. 2. 3. 4.]
# print(numpy.arange(5)) # >>> [0 1 2 3 4]
# print(numpy.arange(0, 10)) # >>> [0 1 2 3 4 5 6 7 8 9]
# print(numpy.arange(0, 10, 2)) # >>> [0 2 4 6 8]
""" 等差数列 """
# print(numpy.linspace(10,15,num=5)) # >>> [10. 11.25 12.5 13.75 15. ]
# print(numpy.linspace(10,15,num=3)) # >>> [10. 12.5 15. ]
""" 等比数列 """
# print(numpy.logspace(0,9,num=4)) # >>> [1.e+00 1.e+03 1.e+06 1.e+09]
# print(numpy.logspace(0,20,num=5)) # >>> [1.e+00 1.e+05 1.e+10 1.e+15 1.e+20]
""" 单位矩阵 """
# print(numpy.eye(3,dtype=int)) # >>> [[1 0 0][0 1 0][0 0 1]]
""" 排列(严格模式) """
# print(numpy.reshape(numpy.arange(6),(2,3))) # >>> [[0 1 2][3 4 5]]
""" 排列(懒惰模式) """
# print(numpy.resize(numpy.arange(7),(2,3))) # >>> [[0 1 2][3 4 5]]
配列 (追加、削除、変更)
import numpy
# 每个数组的长度必须一致
arr = numpy.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
""" 数组(添加) """
# print(numpy.append(arr,[100,200,300])) # >>> [1 2 3 4 5 6 7 8 9 100 200 300]
""" 数组(插入) """
# print(numpy.insert(arr,1,[0,0,0])) # >>> [1 0 0 0 2 3 4 5 6 7 8 9]
""" 数组(删除) """
# print(numpy.delete(arr,[6,7])) # >>> [1 2 3 4 5 6 9] # 索引位置删除
# print(numpy.delete(arr,2,axis=0)) # >>> [[1 2 3][4 5 6]] # 整个行删除
# print(numpy.delete(arr,numpy.s_[::2])) # >>> [2 4 6 8] # 按照步长删除
# print(numpy.delete(arr,numpy.s_[2:])) # >>> [1 2] # 指定位置开始删除
# print(numpy.delete(arr,numpy.s_[1:8])) # >>> [1 9] # 指定范围内的删除
""" 数组(展开) """
# print(arr.flatten()) # >>> [1 2 3 4 5 6 7 8 9]
# print(arr.ravel()) # >>> [1 2 3 4 5 6 7 8 9]
""" 数组(填充) """
# print(numpy.zeros(5)) # >>> [0. 0. 0. 0. 0.]
# print(numpy.ones(5)) # >>> [1. 1. 1. 1. 1.]
""" 数组(唯一) """
# print(numpy.unique([1,1,2,3,3,3])) # >>> [1 2 3] # 查找数组内的唯一元素
配列 (結合と分割)
import numpy
""" 水平或垂直合并 """
a1 = numpy.arange(3) # >>> [0 1 2]
a2 = numpy.arange(3, 6) # >>> [3 4 5]
# print(numpy.hstack((a1, a2))) # >>> [0 1 2 3 4 5] # 水平合并
# print(numpy.vstack((a1, a2))) # >>> [[0 1 2][3 4 5]] # 垂直合并
b1 = numpy.array([[1], [2], [3]])
b2 = numpy.array([["a"], ["b"], ["c"]])
# print(numpy.hstack((b1, b2))) # >>> [['1' 'a']['2' 'b']['3' 'c']]
# print(numpy.vstack((b1, b2))) # >>> [['1']['2']['3']['a']['b']['c']]
""" 数组合并 """
c1 = numpy.array([[1,2],[3,4]])
c2 = numpy.array([[10,20],[30,40]])
# print(numpy.concatenate((c1,c2))) # >>> [[1 2][ 3 4][10 20][30 40]] # 合并
# print(numpy.concatenate((c1,c2),axis=0)) # >>> [[1 2][ 3 4][10 20][30 40]] # 合并(行)
# print(numpy.concatenate((c1,c2),axis=1)) # >>> [[1 2 10 20][3 4 30 40]] # 合并(列)
""" 数组拆分 """
arr2D = numpy.arange(9).reshape(3, 3) # >>> [[0 1 2][3 4 5][6 7 8]]
# print(numpy.hsplit(arr2D,3)[0]) # >>> [[0][3][6]] # 水平拆分
# print(numpy.vsplit(arr2D,3)[0]) # >>> [[0 1 2]] # 垂直拆分
配列(演算)
import numpy
"""
numpy.sin(arr) 正弦
numpy.cos(arr) 余弦
numpy.tan(arr) 正切
numpy.arcsin(arr) 反正弦
numpy.arccos(arr) 反余弦
numpy.arctan(arr) 反正切
numpy.exp(arr) 指数函数
numpy.sqrt(arr) 开根号
一元函数: abs, sqrt, exp, log, ceil, round, floor, rint, trunc, modf, isnan, isinf, cos, sin, tan
二元函数: add, substract, multiply, divide, power, mod, maximum, mininum
"""
m = numpy.arange(6).reshape(2, 3) # >>> [[0 1 2][3 4 5]]
""" 加减乘除 """
# 方法1
# print(m + 1) # >>> [[1 2 3][4 5 6]]
# print(m - 1) # >>> [[-1 0 1][ 2 3 4]]
# print(m * 2) # >>> [[ 0 2 4][ 6 8 10]]
# print(1 / (m + 1)) # >>> [[1. 0.5 0.33333333][0.25 0.2 0.16666667]]
# 方法2
m1 = numpy.array([[4,15],[10,35]])
m2 = numpy.array([[1,3],[5,7]])
# print(numpy.add(m1,m2)) # >>> [[5 18][15 42]] # 加
# print(numpy.subtract(m1,m2)) # >>> [[3 12][5 28]] # 减
# print(numpy.multiply(m1,m2)) # >>> [[4 45][50 245]] # 乘
# print(numpy.divide(m1,m2)) # >>> [[4. 5.][2. 5.]] # 除
""" 向量点积 """
# print(numpy.dot([0,1,2],[0,1,2])) # >>> 5 # 向量点积(a1*b1+a2*b2+...)
""" 叠乘 """
# print(numpy.multiply([1,2,3],[1,2,3])) # >>> [1 4 9] # 乘
# print(numpy.outer([1,2],[5,10,15])) # >>> [[ 5 10 15][10 20 30]] # 叠乘
""" 幂运算 """
# print(m**3) # >>> [[ 0 1 8][ 27 64 125]]
""" 平均值 """
# 方法1
# print(numpy.mean(a=m)) # >>> 2.5 # 平均值
# print(numpy.mean(m,axis=0)) # >>> [1.5 2.5 3.5] # 平均值(行)
# print(numpy.mean(m,axis=1)) # >>> [1. 4.] # 平均值(列)
# 方法2
# print(numpy.median(m)) # >>> 2.5
# print(numpy.median(m,axis=0)) # >>> [1.5 2.5 3.5]
# print(numpy.median(m,axis=1)) # >>> 2.5
""" max,min """
# print(numpy.max(m)) # >>> 5 # 最大值
# print(numpy.min(m)) # >>> 0 # 最小值
m2=numpy.array([[1,3,0,2],[2,0,3,2]])
# print(m2.max(axis=0)) # >>> [2 3 3 2] # max的对应值(行)
# print(m2.argmax(axis=0)) # >>> [1 0 1 0] # max的对应索引(行)
# print(m2.max(axis=1)) # >>> [3 3] # max的对应值(列)
# print(m2.argmax(axis=1)) # >>> [1 2] # max的对应值(列)
# print(numpy.argmin([3,1,2,4,5])) # >>> 1 # min的对应索引
# print(numpy.argmax([2,3,5,4,1])) # >>> 2 # max的对应索引
""" 标准差 """
# print(numpy.std(m)) # >>> 1.707825127659933
""" 方差 """
# print(numpy.var(m)) # >>> 2.9166666666666665
""" 求和 """
# print(numpy.sum(m)) # >>> 15 # 总合
# print(numpy.cumsum(m)) # >>> [ 0 1 3 6 10 15] # 第n个元素为前n-1个元素累加和
# print(numpy.sum(m, axis=0)) # >>> 15 [3 5 7] # 水平相加
# print(numpy.sum(m, axis=1)) # >>> 15 [ 3 12] # 垂直相加
""" 平铺 """
# print(numpy.tile(m,(2,1))) # >>> [[0 1 2][3 4 5][0 1 2][3 4 5]]
""" 四舍五入 """
d1=numpy.array([[1.123,2.456],[3.789,4.555]])
# print(numpy.round(d1)) # >>> [[1. 2.][4. 5.]]
""" 绝对值 """
# print(numpy.abs([-1,-2,3])) # >>> [1 2 3]
# print(numpy.absolute([-2,-3,4])) # >>> [2 3 4]
""" 平方 """
# print(numpy.square([1,2,3])) # >>> [1 4 9]
""" 排序 """
# print(numpy.sort(numpy.array([1, 4, 3, 2, 5, 6]))) # >>> [1 2 3 4 5 6]
配列(要素取得)
import numpy
arr2D = numpy.arange(12).reshape(3, 4)
# print(arr2D) # >>> [[ 0 1 2 3][ 4 5 6 7][ 8 9 10 11]]
# print(arr2D[1,1]) # >>> 5 # 等同于 arr2D[1][1]
# print(arr2D[:1,2:]) # >>> [[2 3]]
# print(arr2D[:1]) # >>> [[0 1 2 3]]
# print(arr2D[::2]) # >>> [[ 0 1 2 3][ 8 9 10 11]]
# print(arr2D[::-1]) # >>> [[ 8 9 10 11][ 4 5 6 7][ 0 1 2 3]]
配列(ブール値判定)
import numpy
s = numpy.arange(12).reshape(3, 4)
# print(s) # >>> [[ 0 1 2 3][ 4 5 6 7][ 8 9 10 11]]
row = numpy.array(
[True, False, False]
)
column = numpy.array(
[True, True, False, False]
)
# print(s[row, :]) # >>> [[0 1 2 3]] # 保留第一行
# print(s[:, column]) # >>> [[0 1][4 5][8 9]] # 保留前两列
# print(s[s > 5]) # >>> [ 6 7 8 9 10 11]
配列(ランダム)
import numpy
""" 随机数的条件判断 """
arrNumber = numpy.random.rand(2,3)
# print(arrNumber) # >>> [[0.4040385 0.25586712 0.98025492][0.73933662 0.24635626 0.83856925]]
arrBool = arrNumber < 0.8
# print(arrBool) # >>> [[ True True False][ True True False]]
""" 随机整数 """
# print(numpy.random.randint(5)) # >>> 3
# print(numpy.random.randint(1,5)) # >>> 1
# print(numpy.random.randint(5,size=10)) # >>> [1 4 3 2 1 1 2 0 3 3]
# print(numpy.random.randint(5,10,size=(2,2))) # >>> [[7 5][9 5]]
""" 随机浮点数-类型1 """
# print(numpy.random.rand(2)) # >>> [0.97270619 0.51185975]
# print(numpy.random.rand(2,2)) # >>> [[0.47802695 0.62404042][0.50270551 0.22062832]]
# print(numpy.random.rand(2,2)*100) # >>> [[ 4.5516591 31.96526817][18.54665825 29.90166157]]
# print(numpy.random.rand(4).reshape(1,4)) # >>> [[0.94190749 0.45243098 0.6083467 0.44261581]]
# print(numpy.random.rand(4).reshape(2,2)) # >>> [[0.55084269 0.65391016][0.95948768 0.99081886]]
""" 随机浮点数-类型2 """
# print(numpy.random.normal(size=(2,2))) # >>> [[ 0.25009147 -1.23808099][ 1.24380185 -0.44293845]]
# print(numpy.random.standard_normal((2,2))) # >>> [[-0.79393322 0.88915117][-0.3713971 -0.9275841 ]]
# print(numpy.random.standard_normal(3)) # >>> [-0.88057398 0.29794299 -1.41674055]
# print(numpy.random.randn(2,2)) # >>> [[ 0.25219723 -1.22391401][ 0.48900845 -1.53689193]]
# print(numpy.random.randn(3)) # >>> [-0.51382206 0.65768077 -0.23819675]
""" 仅限1维数组,随机排列 """
# print(numpy.random.permutation([1,2,3,4,5])) # >>> [3 5 4 2 1]
""" 0~1范围内产生随机数 """
# print(numpy.random.random_sample(2)) # >>> [0.38562772 0.42020144]
# print(numpy.random.random_sample((2,2))) # >>> [[0.41110841 0.79926067][0.80795522 0.75781746]]
""" empty方法 """
# print(numpy.empty([2,2])) # >>> [[9.90263869e+067 8.01304531e+262][2.60799828e-310 1.40688321e-311]]
# print(numpy.empty(3)) # >>> [ 6.26756526e+250 -1.06827737e-149 1.11520858e-166]
# print(numpy.empty(shape=(3),dtype=int)) # >>> [1044266506 1025531680 1953263648]
# print(numpy.empty(shape=(2,2),dtype=numpy.int8)) # >>> [[0 0][0 0]] # >>> 空的多维数组
# print(numpy.empty(shape=(3),dtype=float)) # >>> [ 9.84972389e-312 9.84972389e-312 -1.73811448e-088]
# print(numpy.empty(shape=(3),dtype=numpy.float16)) # >>> [-2.304e+04 6.131e-02 2.766e-05]
""" 随机抽取 """
# print(numpy.random.choice(a=[1,2,3,4,5],size=(2))) # >>> [5 1]
# print(numpy.random.choice(a=[1,2,3,4,5],size=(2,2))) # >>> [[3 1][5 4]]
""" 给定形状产生随机数组 """
# print(numpy.random.uniform(low=1,high=5,size=(2))) # >>> [3.93644384 3.79101644]
# print(numpy.random.uniform(1,5,size=(2,2))) # >>> [[2.90634328 4.17696447][1.83768879 1.75956575]]
""" 仅限随机1次,后续数据相同 """
# print(numpy.random.RandomState(0).rand(3)) # >>> [0.5488135 0.71518937 0.60276338]
# print(numpy.random.RandomState(1).rand(3)) # >>> [4.17022005e-01 7.20324493e-01 1.14374817e-04] # 科学记数法
""" 无限制随机 """
# print(numpy.random.RandomState().rand(3)) # >>> [0.32202852 0.82726346 0.59902676]
""" 0 默认数字 1 科学记数法 """
# numpy.random.seed(1)
# print(numpy.random.rand(2,2)) # >>> [[4.17022005e-01 7.20324493e-01][1.14374817e-04 3.02332573e-01]]
配列(動的配列)
import numpy
# numpy.frombuffer 用于实现动态数组
"""
numpy.frombuffer(buffer, dtype = float, count = -1, offset = 0)
buffer 可以是任意对象,会以流的形式读入。
dype 返回数组的数据类型,可选。
count 读取数据数量,默认为-1,读取所有数据。
offset 读取的起始位置,默认为0
"""
data =b'hello world!' # 接受 buffer 输入参数,以流的形式读入转化成 ndarray 对象。
r1 = numpy.frombuffer(data,dtype='S3',offset=0,count=-1) # buffer 是字符串的时候,Python3 默认 str 是 Unicode 类型,所以要转成 bytestring 在原 str 前加上 b。
r2 = numpy.frombuffer(data,dtype='S4')
r3 = numpy.frombuffer(data,dtype='S3',count=1)
# print(r1) # >>> [b'hel' b'lo ' b'wor' b'ld!']
# print(r2) # >>> [b'hell' b'o wo' b'rld!']
# print(r3) # >>> [b'hel']
配列 (ASCII エンコーディングに変換)
import numpy
# 数组元素转ASCII编码
abc = "abcdef"
# print(numpy.fromstring(abc,dtype=numpy.int8))
# >>> [ 97 98 99 100 101 102]
Numpy ファイル操作
import numpy as N
import os
fileName="data.npy"
# 存储为npy文件
'''
os.chdir("C:/Users/Administrator/Desktop/")
arr=N.random.rand(5,5)
N.save(fileName,arr)
'''
# 读取npy文件
'''
os.chdir("C:/Users/Administrator/Desktop/")
loadFile=N.load(fileName)
print(loadFile)
'''
# 存储为文本文件(默认为科学记数法)
os.chdir("C:/Users/Administrator/Desktop/")
arr=N.random.rand(5,5)
# N.savetxt("data.txt",arr,delimiter=",",fmt="%2f") # fmt 浮点型
# N.savetxt("data2.txt",arr,delimiter=",") # delimiter 分隔
# 读取文本文件
# loadFileTxt=N.loadtxt("data2.txt",delimiter=",")
# print(loadFileTxt)
簡単な例 (ラジアンと角度の操作)
import numpy
# 角度转弧度
t = numpy.array([0,30,60])
# 通过乘 pi/180 转化为弧度
# print (numpy.sin(t*numpy.pi/180)) # 正弦值 # >>> [0. 0.5 0.8660254]
# print (numpy.cos(t*numpy.pi/180)) # 角度的余弦值 # >>> [1. 0.8660254 0.5]
# print (numpy.tan(t*numpy.pi/180)) # 正切值 # >>> [0. 0.57735027 1.73205081]
# 弧度转角度
"""
deg = 0 # 角度
arc = 0.5 # 弧度
hundred = 100
while True:
if(numpy.round(arc*hundred) == numpy.round(numpy.sin(numpy.array([deg])*numpy.pi/180)[0]*hundred)):
print("角度:",deg)
break
else:
# print(numpy.sin(numpy.array([deg])*numpy.pi/180)[0])
pass
deg = deg + 1
"""