NumPyを使用して必要なデータをすばやく作成するにはどうすればよいですか?

通常の断片的な学習であろうとオンラインコースの学習であろうと、コード内のアルゴリズムまたはモデルを実現または実行することで、理解を深めるだけでなく、記憶を強化することもできます。したがって、必要なデータを作成および整理する方法を学ぶために、ある程度の時間を費やす必要があります。

1.NumPy配列

NumPy配列について注意すべきことの1つは、配列は特定の順序で配置さ同じタイプの要素組み合わせあるということです。

2.NumPy配列の生成方法


①一般的な配列を生成するには、dtypeパラメーターを使用してNumPy配列要素のデータ型を指定できます。
②通常、パラメータとして数値や形状を渡すことができ、後者はサイズ形状の配列を生成します

2.1一般的な配列の生成

  • 1次元配列を生成します:着信リスト
  • タプルの配列を生成します:タプルを渡します
  • 多次元配列を生成します:ネストされたリストを渡します

添付コード:

import numpy as np

arr1 = np.array([1,2,3,4,5])
print(arr1)

arr2 = np.array((1,2,3,4,5))
print(arr2)

arr3 = np.array([[1,2,3],[2,3,4],[4,5,6]])
print(arr3)  ## 这里注意 numpy 数组的打印规则:最内层轴的元素是从左至右,剩下的轴都是从上至下
[1 2 3 4 5]
[1 2 3 4 5]
[[1 2 3]
 [2 3 4]
 [4 5 6]]

2.2特殊な型の配列を生成する

2.2.1ゼロ、1、目

  • 指定された形状のすべて0の配列を生成します(単一の数値または形状を渡します):np.zeros()
  • 指定された形状のすべての1の配列を生成します(単一の数値または形状を渡します):np.ones()
  • 正方行列を生成します(単一の数値を渡します):np.eye()

注:括弧付きのタプルの形で形状を渡します

arr4 = np.zeros(3) # 传递单个数字是一维数组
print(arr4)

arr5 = np.ones((3, 3))  # 传递shape 是大小为 shape 的数组
print(arr5)

arr6 = np.eye(3)  # 方阵,至只能传递单个数字
print(arr6)
[0. 0. 0.]
[[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

2.2.2等差数列関数:linspace()関数

linspace()関数は、線形間隔ベクトルを生成するために使用されます。
Linspaceはコロン演算子 ":"に似ていますが、ポイントの数を直接制御でき、常にエンドポイントを含めることができます。
(「linspace」名の「lin」は、対数間隔値を生成する兄弟関数logspaceの代わりに、線形間隔値を生成することを示します。)

arr70 = np.linspace(1, 10, 6)
print(arr70) 

arr71 = np.linspace(1, 10)  # 默认 num=50
print(arr71)
[ 1.   2.8  4.6  6.4  8.2 10. ]
[ 1.          1.18367347  1.36734694  1.55102041  1.73469388  1.91836735
  2.10204082  2.28571429  2.46938776  2.65306122  2.83673469  3.02040816
  3.20408163  3.3877551   3.57142857  3.75510204  3.93877551  4.12244898
  4.30612245  4.48979592  4.67346939  4.85714286  5.04081633  5.2244898
  5.40816327  5.59183673  5.7755102   5.95918367  6.14285714  6.32653061
  6.51020408  6.69387755  6.87755102  7.06122449  7.24489796  7.42857143
  7.6122449   7.79591837  7.97959184  8.16326531  8.34693878  8.53061224
  8.71428571  8.89795918  9.08163265  9.26530612  9.44897959  9.63265306
  9.81632653 10.        ]

2.3ランダム配列を生成する

2.3.1アレンジ()関数

アレンジ()

  • 指定された長さの1次元ランダム配列を生成ます:np.arange(n)
    (実際には、デフォルトの開始= 1、停止= n、ステップ= 1)
  • 指定された長さとステップ長のランダム配列を生成ます:arange([start、] stop [、step、]、dtype = None)

コード

arr7 = np.arange(10) # 其实就是默认的 start =1, stop =n, step=1
print(arr7)

arr8 = np.arange(1, 10, 2)
print(arr8)
[0 1 2 3 4 5 6 7 8 9]
[1 3 5 7 9]

2.3.2ランダムモジュール

NumPyでランダムモジュールを使用する

  • (0、1)の間にランダム配列を生成します:np.random.random()(入力はタプルの形の形状です)
  • (0、1)の間にランダム配列を生成します:np.random.rand()(入力は形状を表す数値です)
  • 正規分布満たすランダム配列を生成します:np.random.randn()(入力は形状を表す数値、または入力は要素の数)
  • ランダムな整数配列を生成します:np.random.randint()(入力は要素の数または形状の定義です)
  • シャッフルされた順序の後にランダム配列を生成します:np.random.shuffle()(入力ランダム配列x)
  • 既知の配列からランダム配列選択します:np.radom.choice()(入力乱数)
rand()およびrandn()

ランド(d0、d1、…、dn)

randn(d0、d1、…、dn)

arr90 = np.random.rand(5)
print(arr90)   # 这里 n=5 是返回的元素的个数(因为已经默认元素取值为 0-1 之间)
arr91 = np.random.rand(4, 2)  # 这里的参数不需要加()
print(arr91)

arr101 = np.random.randn(5)
print(arr101)  # 这里 n=5 是返回的元素的个数
arr102 = np.random.randn(2, 3)    # 这里的参数不需要加()
print(arr102) 
[0.06005572 0.39201155 0.65739602 0.82993779 0.6834849 ]
[[0.22448704 0.46166822]
 [0.1313628  0.81239307]
 [0.82737089 0.08500505]
 [0.48441804 0.86254244]]
[ 0.31277617  2.11994118 -1.67146697 -0.9564838  -1.20713141]
[[ 0.81955507  1.5992909  -0.72949892]
 [-0.40706872 -1.80163208  0.37124959]]

デート()

randint(low、high = None、size = None、dtype = 'l')

arr11 = np.random.randint(5)
print(arr11)  # 这里 n=5 相当于上限(并不是返回的元素个数),只返回了一个数字
arr12 = np.random.randint(1,5, (2, 3))  # 这里的shape参数需要加(),或者选择 size=(,)
print(arr12)
arr13 = np.random.randint(5, size=(2, 3))
print(arr13)
4
[[2 4 4]
 [2 1 3]]
[[3 2 3]
 [3 2 1]]

注:
①rand()メソッドおよびrandn()メソッドの
場合、入力パラメーターが数値nの場合、n個の乱数が返されます。
入力が2つ以上の数値の場合、これらの複数の数値のサイズの配列は返される;

②randint()メソッドの
場合、入力パラメータが数値nの場合、nを超えない乱数が返されます。単一の数値nと形状が入力された場合、nは要素の上限(取得されません)であり、 shape
は、生成された配列サイズです。

2.4配列の形状を変更する

reshape()関数を使用する

arr14 = np.arange(8).reshape(4,2)
print(arr14)
 
arr15 = np.random.rand(8).reshape(4,2)
print(arr15)

arr16 = np.random.randn(8).reshape(4,2)
print(arr16)

arr17 = np.random.randint(8,size=(2,4)).reshape(4,2)
print(arr17)
[[0 1]
 [2 3]
 [4 5]
 [6 7]]
[[0.74805737 0.4715235 ]
 [0.61835228 0.36544255]
 [0.19811176 0.37036763]
 [0.21455191 0.09242501]]
[[-0.4904222   0.40334254]
 [ 1.06279067  0.8108894 ]
 [-0.62594376  0.79288496]
 [ 1.12483527  0.66219263]]
[[7 4]
 [5 3]
 [1 2]
 [1 6]]

実際、上記から、reshape()を使用する方法は、関数のパラメーターに形状を渡すよりも非常に簡単で便利であることがわかります。

注意すべき点の1つ:randint()は、最初にsizeパラメーターを使用して多次元配列を生成し、次にreshape()を使用する必要があります。

[:、例:newaxis]

機械学習の一般的な方法は、[:、 np.newaxis]を使用して、1次元配列を必要な特徴行列形式に変換することです。

注:np.newaxisは、numpy.ndarrayに軸を追加します

import numpy as np

rng = np.random.RandomState(42) 
x = 10* rng.rand(5)
print(x)
print(x.shape)
[3.74540119 9.50714306 7.31993942 5.98658484 1.5601864 ]
(5,)

1つの方法は、前述のreshape()メソッドを使用することです。

X = x.reshape(-1, 1)
print(X)
print(X.shape)
X = x.reshape(-1, 1)
print(X)
print(X.shape)
[[3.74540119]
 [9.50714306]
 [7.31993942]
 [5.98658484]
 [1.5601864 ]]
(5, 1)

次に、この一般的な方法があります。

X = x[:, np.newaxis]
print(X)
print(X.shape)
[[3.74540119]
 [9.50714306]
 [7.31993942]
 [5.98658484]
 [1.5601864 ]]
(5, 1)

3.アプリケーション

指定された長方形の領域をカバーする散乱点(2次元のランダムな点)を生成します

  • インポートモジュール
import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
import seaborn as sns; sns.set()

from sklearn.datasets import make_blobs
  • 2次元ランダムポイント(固定領域)
rng = np.random.RandomState(0)
X_new = [-1, -1] + [5, 7] * rng.rand(2000, 2)

plt.scatter(X_new[:, 0], X_new[:, 1], s=10) 

X_new的形状:(2000、2)

ランダムな点でカバーされる範囲:X_new対応:左下隅の座標+増加した値

  • 結果を視覚化する
    ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/Robin_Pi/article/details/103860398