この記事の下にある無料のNumPyチートシートをお見逃しなく
NumPy は、Pythonのデータ解析パッケージとしてよく使用されています。 NumPy を使用することにより、ワークフローを高速化し、Python エコシステムの他のパッケージ (例えば scikit-learn) とのインターフェースをとることができます。 NumPyはもともと2000年代半ばに開発され、Numericと呼ばれるさらに古いパッケージから生まれました。 この長寿は、Python のほとんどすべてのデータ分析または機械学習パッケージが、何らかの形で NumPy を活用していることを意味します。
このチュートリアルでは、ワインの品質に関するデータを分析するために NumPy を使用することを説明します。 このデータには、pH
や fixed acidity
などのワインのさまざまな属性に関する情報と、各ワインの 0
から 10
の間の品質スコアが含まれています。 品質スコアは、少なくとも3
人の味覚テストの平均値である。 NumPy の使い方を学びながら、ワインの知覚品質についてさらに解明していきます。
今回分析するワインは、ポルトガルの Minho 地域産です。
このデータは UCI Machine Learning Repository からダウンロードされ、ここで入手できます。 このチュートリアルで使用する winequality-red.csv
ファイルの最初の数行です。
"fixed acidity";"volatile acidity";"citric acid";"residual sugar";"chlorides";"free sulfur dioxide";"total sulfur dioxide";"density";"pH";"sulphates";"alcohol";"quality"7.4;0.7;0;1.9;0.076;11;34;0.9978;3.51;0.56;9.4;57.8;0.88;0;2.6;0.098;25;67;0.9968;3.2;0.68;9.8;5
データは、ssv (semicolon separated values) 形式と呼んでいるもので、各レコードはセミコロン (;
) で区切られ、行は新しい行で区切られています。 ファイルにはヘッダー行を含む 1600
行と 12
列があります。
始める前に、簡単なバージョンメモ – Python 3.5 を使用することにしました。
- Lists Of Lists for CSV Data
- Numpy 2 次元配列
- Creating A NumPy Array
- Alternative NumPy Array Creation Methods
- Using NumPy To Read In Files
- Indexing NumPy Arrays
- Slicing NumPy Arrays
- Assigning Values To NumPy Arrays
- 1-Dimensional NumPy Arrays
- N-Dimensional NumPy Arrays
- NumPy データ型
- データ型の変換
- NumPy Array Operations
- Single Array Math
- Multiple Array Math
- Broadcasting
- NumPy Array Methods
- NumPy Array Comparisons
- Subsetting
- Combining NumPy Arrays
- Free NumPy Cheat Sheet
- Further Reading
Lists Of Lists for CSV Data
NumPy を使う前に、まず Python と csv パッケージを使ってデータを操作してみます。 csv.reader オブジェクトを使ってファイルを読み込み、ssv ファイルからすべてのコンテンツを読み込んで分割することができます。
以下のコードでは:
- Import the
csv
library. - Open the
winequality-red.csv
file.- With the file open, create a new
csv.reader
object.これは、CSV ファイルの読み込みを可能にするオブジェクトで、CSV ファイルのコンテンツを分割して読み込みます。- キーワード引数
delimiter=";"
を渡して、レコードがデフォルトのカンマ文字ではなくセミコロン文字で分割されるようにします。
- キーワード引数
- ファイルからすべての行を取得するためにリストタイプを呼び出します。
- 結果を
wines
に代入します。
import csvwith open('winequality-red.csv', 'r') as f: wines = list(csv.reader(f, delimiter=';'))
データを読み込んだら、最初の
3
行を出力できます:print(wines)
, , ]
データがリストのリストに読み込まれました。 各内部リストは ssv ファイルからの行である。 お気づきかもしれませんが、リストのリスト全体の各項目は文字列として表現され、計算がしにくくなります。
データを表に整形して、見やすくします。
固定酸度 揮発性酸度 クエン酸 残糖 塩化物 遊離硫黄 二酸化硫黄 全二酸化硫黄 密度 pH 硫酸塩 アルコール 品質 7.4 0.70 0 1.9 0.076 11 34 0.9978 3.51 0.56 9.4 5 7.8 0.88 0 2.6 0.098 25 67 0.9968 3.20 0.68 9.8 5 上の表からわかるように、3行で読み込んでいますが、最初の行には列ヘッダが含まれています。 ヘッダー行以降の各行は、ワインを表します。 各行の最初の要素は
fixed acidity
、2番目はvolatile acidity
、というようになります。 ワインの平均値quality
を求めることができる。 以下のコードは:- ヘッダー行の後の各行から最後の要素を抽出する。
- 抽出した各要素をフロートに変換する。
- 抽出した要素をすべてリスト
qualities
に代入する。 -
qualities
のすべての要素の合計をqualities
の要素の総数で割って平均を求める。
qualities =) for item in wines]sum(qualities) / len(qualities)
5.6360225140712945
望んだ計算はできたが、コードはかなり複雑で、量を計算したいときに毎回同じことをしなければならないのは楽しくないだろう。 幸運にも、NumPy を使用して、データを簡単に扱うことができます。
Numpy 2 次元配列
NumPy では、多次元配列が扱えます。 多次元配列のすべての可能なタイプについては後ほど詳しく説明しますが、今は2次元配列に焦点を当てます。 2次元配列は行列とも呼ばれ、よく知られているものです。 実は、これはリストのリストの考え方を変えただけなのです。 行列には行と列があります。 行番号と列番号を指定することで、行列から要素を抽出することができます。
以下の行列では、最初の行はヘッダー行で、最初の列は
fixed acidity
列です。固定酸度 揮発性酸度 クエン酸 残糖 塩化物 遊離硫黄 二酸化硫黄 全二酸化硫黄 密度 pH 硫酸塩 アルコール 品質 7.4 0.70 0 1.9 0.076 11 34 0.9978 3.51 0.56 9.4 5 7.8 0.88 0 2.6 0.098 25 67 0.9968 3.20 0.68 9.8 5 1行目と2列目で要素を選ぶと
volatile acidity
となる。 3行目、2列目の要素を選ぶと、0.88
となる。NumPyの配列では、次元数をランクと呼び、各次元を軸と呼ぶ。
行列の基本を理解したところで、リストのリストからNumPyの配列にする方法を見てみましょう。
Creating A NumPy Array
NumPy配列は numpy.array 関数を使用して作成することができます。 リストのリストを渡すと、自動的に同じ数の行と列を持つNumPyの配列が作成されます。 計算しやすいように配列の要素はすべてfloat要素にしたいので、文字列を含むヘッダー行は省くことにします。 NumPyの制限の1つは、配列の要素はすべて同じ型でなければならないことです。したがって、ヘッダー行を含めると、配列の要素はすべて文字列として読み込まれます。
以下のコードでは、
-
numpy
パッケージをインポートしています。 - リストのリスト
wines
をarray
関数に渡して、NumPy の配列に変換します。- リストスライスを使用してヘッダー行を除外します。
- キーワード引数
dtype
を指定し、それぞれの要素が float に変換されていることを確認します。
import csvwith open("winequality-red.csv", 'r') as f: wines = list(csv.reader(f, delimiter=";"))import numpy as npwines = np.array(wines, dtype=np.float)
上のコードを実行して、何が起こるか見てみましょう!
wines
を表示すると、今度はNumPyの配列が表示されます:wines
array(,,,...,,,])
データの行と列の数は、NumPy配列のshapeプロパティを使って確認できます:
wines.shape
(1599, 12)
Alternative NumPy Array Creation Methods
NumPy配列を作るために使える方法はさまざまなものがあります。 まず始めに、すべての要素が0である配列を作成することができます。 以下のコードは、行が
3
列が4
列で、すべての要素が0
である配列をnumpy.zerosを使って作成します:import numpy as np
empty_array = np.zeros((3,4)) empty_array
固定サイズの配列が必要だが、まだ値がない場合に、要素がすべて0の配列を作成すると便利です:
また、それぞれの要素が乱数の配列をnumpy.random.randを使って作成することが可能です。 以下はその例です。
np.random.rand(3,4)
array(,,])
乱数でいっぱいの配列を作ることは、サンプル配列を使って素早くコードをテストしたいときに便利です。
Using NumPy To Read In Files
NumPyを使ってcsvや他のファイルを直接配列に読み込むことが可能です。 これは、numpy.genfromtxt 関数を使用して行うことができます。
-
genfromtxt
関数を使用してwinequality-red.csv
ファイルを読み込みます。 - フィールドが適切にパースされるように、キーワード引数
delimiter=";"
を指定します。 - キーワード引数
skip_header=1
を指定して、ヘッダー行をスキップするようにします。
wines = np.genfromtxt("winequality-red.csv", delimiter=";", skip_header=1)
wines
は、リストに読み込んでから float の配列に変換したのと同じ結果になります。 NumPyは配列の要素のデータ型をその形式に基づいて自動的に選択します。Indexing NumPy Arrays
配列を作成する方法はわかりましたが、配列から結果を取得できない限り、NumPyでできることはあまり多くありません。 我々は、個々の要素、要素のグループ、または行や列全体を選択するために、配列のインデックスを使用することができます。 心に留めておくべき重要なことの一つは、Pythonのリストと同様に、NumPyはゼロインデックスであり、最初の行のインデックスは
0
であり、最初の列のインデックスは0
であることを意味することである。 もし4番目の行を扱いたいなら、インデックス3
を使い、2番目の行を扱いたいなら、インデックス1
を使い、といった具合になります。 再びwines
配列を使用します:7.4 0.70 0.00 1.9 0.9.076 11 34 0.9978 3.51 0.56 9.4 5 7.8 0.88 0.00 2.6 0.098 25 67 0.9968 3.20 0.68 9.8 5 7.8 0.76 0.04 2.3 0.092 15 54 0.9970 3.26 0.65 9.8 5 11.2 0.28 0.56 1.9 0.075 17 60 0.9980 3.16 0.58 9.8 6 7.4 0.70 0.00 1.9 0.076 11 34 0.9978 3.51 0.56 9.4 5 行
3
、列4
の要素を選択してみましょう。 以下のコードでは、行のインデックスとして2
を、列のインデックスとして3
を渡しています。wines
2.2999999999999998
NumPyでは2次元の配列を扱うので、要素を取得するために2つのインデックスを指定します。 最初のインデックスは行、または軸
1
のインデックスで、2番目のインデックスは列、または軸2
のインデックスです。wines
の任意の要素は2
インデックスを使用して取得できます。Slicing NumPy Arrays
代わりに4列目から最初の3項目を選択したい場合、コロン (
:
) を使用してそれを行うことができます。 コロンは、開始インデックスから終了インデックスを含まないまでのすべての要素を選択したいことを示します。 これはスライスとも呼ばれます:wines
array()
リストのスライスと同様に、
0
を省略して、先頭から要素3
までのすべての要素を取得することができます:wines
array()
先頭から最後までのすべての要素を取得すると指定すると、列全体を選択することができます。 この場合、コロン(
:
)を使用し、開始や終了のインデックスを付けずに指定します。 以下のコードは、4 列目全体を選択します:wines
array()
上記では列全体を選択しましたが、行全体を抽出することもできます:
wines
array()
インデックスを極端に使用すると、コロン 2 つで
wines
のすべての行と列を選択して配列全体を取得することも可能です。wines
array(,,<br />,<br />...,,,<br />])
Assigning Values To NumPy Arrays
インデックスを使用して、配列の特定の要素に値を割り当てることも可能です。
wines = 10
スライスに対しても同じことができます。
wines = 50
上記のコードは、11番目の列のすべての値を
50
で上書きします。1-Dimensional NumPy Arrays
これまでは、
wines
などの2次元配列で作業してきました。 しかし、NumPy は多次元配列を扱うためのパッケージです。 多次元配列の最も一般的な種類の1つは、1次元配列、またはベクトルです。 上でお気づきのように、wines
をスライスすると、1次元の配列が取り出されます。 1次元配列は1つの要素を取り出すのに1つのインデックスが必要なだけです。 2次元配列の各行と各列は1次元配列なのです。 リストのリストが2次元配列に似ているように、1つのリストが1次元配列に似ているのです。 wines をスライスして3行目だけを取り出すと、1次元配列になります:third_wine = wines
third_wine
は次のようになります:11.2000.2800.5601.9000.07517.00060.0000.9983.1600.5809.8006.000
third_wine
から個々の要素を取り出すには、1つのインデックスを使用できます。 以下のコードは、third_wine
の2番目の項目を表示します:third_wine
0.28000000000000003
これまで扱ったNumPyの関数、例えばnumpy.random.randは、多次元配列で使用することが可能です。 以下は、ランダムなベクトルを生成するために
numpy.random.rand
を使用する方法です:np.random.rand(3)
array()
以前、
np.random.rand
を呼んだとき、2次元配列の形を渡したので、結果は2次元配列になりました。 今回は、1次元配列のshapeを渡しました。 shapeは次元数と各次元の配列の大きさを指定する。 shapeが(10,10)
の場合、10
行、10
列の2次元配列となる。(10,)
の shape は10
個の要素を持つ 1 次元配列になります。NumPy がより複雑になるのは、
2
次元以上の配列を扱い始めるときです。N-Dimensional NumPy Arrays
あまり頻繁に起こることではありませんが、
3
次元より大きい配列を扱いたい場合があります。 これを考える1つの方法は、リストのリストのリストとして考えることです。 例えば、あるお店の毎月の収益を保存しておき、四半期や1年分の結果をすぐに調べられるようにしたいとします。 1年間の収益は次のようになります。この店の1月の収益は
0
、2月は5
、というように。 これらの四半期ごとの収益をリストに分割することができます:year_one = , , , ]
1月からの収益は
year_one
を呼び出すことで取り出すことができます。 四半期全体の結果が欲しい場合は、year_one
またはyear_one
を呼び出すことができます。 これで2次元の配列、つまり行列ができました。 しかし、別の年の結果を追加したい場合はどうすればよいでしょうか。earnings = , , , ], , , , ]]
最初の年の1月からの結果を取得するには
earnings
を呼び出します。 これで1つの要素を取り出すのに3つのインデックスが必要になった。 NumPyの3次元配列もほとんど同じである。earnings = np.array(earnings)earnings
500
また、配列の形状を見つけることができます:
earnings.shape
(2, 4, 3)
インデックスとスライスは3次元配列と全く同じように動作しますが、今度は渡すべき軸が1つ増えています。 すべての年の 1 月の収益を取得したい場合、次のようになります。
earnings
array()
両方の年の第 1 四半期の収益を取得したい場合、次のようになります。 3次元配列から4次元、さらに大きな配列になっても、同じ特性が適用され、同じ方法でインデックス付けやスライスができます。
NumPy データ型
先に述べたように、それぞれの NumPy 配列には、単一のデータ型の要素を格納することができます。 例えば、
wines
はfloat値のみを格納する。 NumPyは独自のデータ型を使って値を格納しますが、これはfloat
やstr
のようなPythonの型とは区別されます。 これは、NumPyのコアがCというプログラミング言語で書かれているためで、CはPythonのデータ型とは異なる方法でデータを格納します。 NumPyのデータ型はPythonとCの間でマッピングされており、変換の手間なくNumPyの配列を使用することができます。NumPy配列のデータ型は、dtypeプロパティにアクセスして見つけることができます:
wines.dtype
dtype('float64')
NumPyにはいくつかのデータ型があり、ほとんどは
float
、str
など、 Pythonデータ型と対応しています。 NumPyのデータ型の完全なリストはここにありますが、ここではいくつかの重要なものを紹介します:-
float
– 浮動小数点数データ. -
int
– 整数データ. -
string
– 文字データ. -
object
– Pythonオブジェクト.
データ型にはさらに、何ビットのメモリを占有するかを示す接尾語がついています。 つまり、
int32
は32ビットの整数データ型、float64
は64
ビットの浮動小数点データ型です。データ型の変換
配列を別の型に変換するにはnumpy.ndarray.asterypeメソッドを使用できます。 このメソッドは実際に配列をコピーし、指定されたデータ型を持つ新しい配列を返します。 例えば、
wines
をint
のデータ型に変換します:wines.astype(int)
array(,,,...,,,])
上で見たように、結果の配列のすべての項目は整数です。 3570>を変換する際に、NumPyのデータ型ではなく、Pythonの<6929>データ型を使用したことに注意してください。 これは、
float
、int
、string
を含むいくつかのPythonデータ型がNumPyで使用でき、自動的にNumPyデータ型に変換されるためです。結果の配列のdtypeのnameプロパティで、NumPyが結果の配列をどのデータ型にマップしたか確認できます:
int_wines = wines.astype(int)int_wines.dtype.name
'int64'
配列は64ビット整数データ型へ変換されていることがわかります。 これは非常に長い整数値を可能にしますが、32ビット整数として値を格納するよりもメモリに多くのスペースを取ります。
配列がメモリに格納される方法をより制御したい場合は、numpyのように直接NumPy d型オブジェクトを作成することができます。int32:
np.int32
numpy.int32
これらを直接使って型変換ができます。
wines.astype(np.int32)
array(,,,...,,,], dtype=int32)
NumPy Array Operations
NumPyでは配列に対して簡単に数学演算ができるようになっています。 これはNumPyの主な利点の1つで、計算を非常に簡単に行うことができます。
Single Array Math
配列と値で基本的な数学操作(
/
,*
,-
,+
,^
)を行うと、配列内のそれぞれの要素にその操作を適用することになるのです。例えば、酔っぱらっていて気前が良いので、各品質スコアに
10
点を追加したいとします。wines + 10
array()
上の操作は
wines
配列を変更しないことに注意してください – ワインの品質列の各要素に10
が追加された新しい 1 次元配列を返します。 たとえば、品質スコアのそれぞれに2
を掛けたい場合は、次のようになります。wines * 2
array()
Multiple Array Math
配列間で数学演算を行うことも可能です。 これは、要素のペアに演算を適用します。 例えば、
quality
列を自分自身に足すと、次のようになります:wines + wines
array()
これは
wines * 2
と同等であることに注意してください – これはNumPyが要素の各ペアを足すからです。 最初の配列の最初の要素は、2番目の配列の最初の要素に追加され、2番目の要素は2番目の配列に追加され、以下同様です。また、これを配列の乗算に使用することもできます。 例えば、アルコール度数と品質が最大になるようなワインを選びたいとしましょう(酔いたいけど、上品でありたい)。
wines * wines
array()
一般的な演算(
/
,*
,-
,+
,^
)はすべて配列間で動作します。Broadcasting
演算対象の配列がまったく同じサイズでない限り、要素演算は不可能です。 このような場合、NumPy は要素を一致させるためにブロードキャストを実行します。
- 各配列の最後の次元が比較されます。
- 次元の長さが等しいか、次元の1つが長さ
1
の場合、処理を続けます。 - 次元の長さが等しくない場合、またどの次元も長さ
1
の場合は、エラーとします。
- 次元の長さが等しいか、次元の1つが長さ
- 最短の配列の次元がなくなるまで次元のチェックを続けます。
例えば、次の2つの形状は互換性があります:
A: (50,3)B (3,)
これは配列
A
の後続次元の長さが3
、配列B
の後続次元の長さが3
であることが理由です。 両者は等しいので、その次元は問題ありません。 配列B
はその後要素がなくなるので、大丈夫です。配列は数学演算のために互換性があります。次の2つの形状も互換性があります:
A: (1,2)B (50,2)
最後の次元は一致し、
A
は最初の次元で長さが1
です。The two arrays don’t match:
A: (50,50)B: (49,49)
The length of the dimensions aren’t equal, and neither array has either dimension length equal to
1
.放送の詳しい説明はここにありますが、原理を説明するためにいくつかの例を見て行きましょう:
wines * np.array()
------------------------------------------------------------------------ValueError Traceback (most recent call last)<ipython -input-40-821086ccaf65> in <module>()----> 1 wines * np.array()ValueError: operands could not be broadcast together with shapes (1599,12) (2,)</module></ipython>
上の例は、2つの配列がマッチする最後の寸法を持っていないのでうまくいきませんでした。 最後の次元が一致する例を示します。
array_one = np.array( , ])array_two = np.array()array_one + array_two
array(,])
ご覧のように、
array_two
はarray_one
の各行にわたってブロードキャストされています。rand_array = np.random.rand(12)wines + rand_array
array(,,,...,,,])
rand_array
の要素はwines
の各行にわたってブロードキャストされるので、wines
の最初の列にはrand_array
の最初の値が追加され、以下同様。NumPy Array Methods
共通の数学操作に加えて、NumPyには配列に対してより複雑に計算するためのいくつかのメソッドも用意されています。 この例として、numpy.ndarray.sumメソッドがあります。 これは、デフォルトでは配列のすべての要素の合計を求めます:
wines.sum()
9012.0
すべての品質評価の合計は
154.1788
となります。 キーワード引数axis
をsum
メソッドに渡すと、軸上の合計を求めることができます。 3570> 行列に対してsum
を呼び出し、axis=0
を渡すと、配列の最初の軸の総和が求まります。 これにより、各列のすべての値の合計が得られます。 これは、最初の軸の総和が各列の総和を与えるということとは逆に思えるかもしれませんが、これを考える一つの方法は、指定された軸が「離れていく」軸であるということです。 つまり、axis=0
を指定すると、行が消えて、各行にわたる残りの軸の合計を求めることになります:wines.sum(axis=0)
array()
形状を確認することで、合計が正しく行われたことを確認できます。
wines.sum(axis=0).shape
(12,)
もし
axis=1
を渡すと、配列の2番目の軸の総和を求めます。wines.sum(axis=1)
array()
他にも
sum
メソッドと同じような動作をするメソッドがいくつかあります。 - With the file open, create a new
- numpy.ndarray.max – 配列の最大値を求めます。
配列メソッドの全リストはこちらです。
NumPy Array Comparisons
NumPyでは<
、>
、>=
、<=
そして==
などの比較演算により行とある値の一致を確認することが可能になっています。 たとえば、どのワインの品質評価が 5
より高いかを確認したい場合、次のようにします。
wines > 5
array(, dtype=bool)
どのワインの品質評価が 5
より高いかを示すブール配列が得られます。 他の演算子でも同じようなことができます。 例えば、10
:
wines == 10
array(, dtype=bool)
Subsetting
ブール配列とNumPy配列でできる強力なことの1つは、NumPy配列の特定の行または列だけを選択できることです。 例えば、以下のコードは、品質が7
以上のwines
の行のみを選択します:
high_quality = wines > 7wines
array(,,])
high_quality
がTrue
値を含む行のみ、およびすべての列を選択しています。 このサブセット化により、特定の基準で配列をフィルタリングすることが簡単になります。 例えば、アルコール度数の高いワインや品質の高いワインを探すことができます。
high_quality_and_alcohol = (wines > 10) & (wines > 7)wines
array(,,,,,,,,,,,,,,,])
サブセットと代入を組み合わせて、配列内の特定の値を上書きすることができます。 これはしばしば、配列要素へのアクセスを容易にすることができます。 最も単純な再形成は、軸を反転させることで、行が列に、またはその逆が可能になります。 これはnumpy.transpose関数で実現できます。
np.transpose(wines).shape
(12, 1599)
配列を一次元表現にするためにnumpy.ravel関数を使用することができます。
wines.ravel()
array()
以下は、numpy.ravel
の順序がわかる例です:
array_one = np.array( , ])array_one.ravel()
array()
最後に、配列を指定した形状に変形するnumpy.reshape関数を使用できます。 以下のコードは、wines
の2行目を2
行と6
列の2次元配列にします:
wines.reshape((2,6))
array(,])
Combining NumPy Arrays
NumPy では、複数の配列を1つの統合された配列にまとめることは非常によくあることです。 numpy.vstackを使って、複数の配列を縦に積み重ねることができます。 これは、2番目の配列の項目が最初の配列に新しい行として追加されるようなものだと考えてください。 白ワインの品質に関する情報を含むwinequality-white.csv
データセットを読み込んで、赤ワインに関する情報を含む既存のwines
データセットと結合することができます。
以下のコードでは、
-
winequality-white.csv
. -
white_wines
.
を読み込む
の形を表示
white_wines = np.genfromtxt("winequality-white.csv", delimiter=";", skip_header=1)white_wines.shape
(4898, 12)
見ての通り、4898
ワインの属性を持っていますね。 白ワインのデータができたので、すべてのワインデータを結合します。
以下のコードでは:
-
vstack
関数を使ってwines
とwhite_wines
を結合します。 - 結果の形状を表示する。
all_wines = np.vstack((wines, white_wines))all_wines.shape
(6497, 12)
見ての通り、結果は6497
行で、これはwines
の行数とred_wines
の行数の合計です。
もし、行数は一定で、列を結合して配列を横方向に結合したい場合は、numpy.hstack関数を使用すれば良いのです。
最後に、hstack
とvstack
の汎用版としてnumpy.concatenateを使用することができます。 2つの配列を連結したい場合は、concatenate
に渡して、axis
に連結したいキーワード引数を指定します。 第一軸に沿った連結はvstack
に似ており、第二軸に沿った連結はhstack
に似ています:
np.concatenate((wines, white_wines), axis=0)
array(,,,...,,,])
Free NumPy Cheat Sheet
NumPy についてもっと学びたいと思ったら、NumPy と Pandas についてのインタラクティブコースをチェックしてみてください。
また、無料の NumPy チートシートで、NumPy のスキルを次のレベルに引き上げることもできます!
Further Reading
これで NumPy と、それをデータセットに適用する方法を十分に理解したはずです。
より深く掘り下げたい場合は、以下のリソースが役に立ちます:
- NumPy Quickstart – 良いコード例があり、ほとんどの NumPy の基本的な機能をカバーしています。
- Python NumPy Tutorial – NumPy と他の Python ライブラリに関する素晴らしいチュートリアル。
- Visual NumPy Introduction – NumPy のコンセプトを説明するために人生ゲームを使っているガイド。
次のチュートリアルでは、Pandas についてもっと掘り下げます。
- 配列の中に複数のデータ型を混ぜることができない。
- 各列がどんなデータ型を持っているかを覚えておかなければならない。
Vik は Dataquest の CEO 兼創設者です。