0Pricing
Python Academy · レッスン

NumPy 配列と dtype

ndarray を作成し、dtype を理解して、配列のプロパティを調べます。

「NumPy 配列と dtype」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。

NumPyとは

NumPyはndarrayを提供します。これは型が固定された連続メモリ上の配列で、Pythonのリストより桁違いに高速なベクトル化演算をサポートします。

import numpy as np

arr = np.array([1, 2, 3, 4, 5])
print(arr)          # [1 2 3 4 5]
print(arr * 2)      # [ 2  4  6  8 10]   (no Python loop)

配列の作成

一般的な作成関数には、np.array()、np.zeros()、np.ones()、np.arange()、np.linspace()があります。

import numpy as np

print(np.zeros((2, 3)))     # 2x3 array of 0.0
print(np.ones(5))           # [1. 1. 1. 1. 1.]
print(np.arange(0, 10, 2))  # [0 2 4 6 8]
print(np.linspace(0, 1, 5)) # [0.   0.25 0.5  0.75 1.  ]

dtypes

NumPyの各配列には単一のdtypeがあります。一般的なdtypeには、int32、int64、float32、float64、bool、complex128があります。

import numpy as np

a = np.array([1, 2, 3])           # int64 by default
b = np.array([1.0, 2.0])          # float64
c = np.array([1, 2], dtype=np.float32)

print(a.dtype)  # int64
print(c.dtype)  # float32

配列のShapeとndim

shapeは各次元のサイズを表すタプルです。ndimは次元数です。sizeは要素の総数です。

import numpy as np

m = np.ones((3, 4))
print(m.shape)   # (3, 4)
print(m.ndim)    # 2
print(m.size)    # 12
print(m.dtype)   # float64

形状変更

reshape()は新しい形状のビューを返します(データは同じです)。flatten()は1次元配列としてコピーを返します。

import numpy as np

arr = np.arange(12)
mat = arr.reshape(3, 4)
print(mat)
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]
print(mat.flatten())   # [ 0  1  2  3 ...]

型変換

arr.astype(dtype)を使うと、配列を別の型に変換できます。この操作は必ずコピーを返します。

import numpy as np

arr = np.array([1, 2, 3])
float_arr = arr.astype(np.float64)
print(float_arr)   # [1. 2. 3.]
print(float_arr.dtype)   # float64

乱数配列

np.randomを使って、一様分布、正規分布、整数などの乱数配列を生成します。

import numpy as np

rng = np.random.default_rng(seed=42)   # reproducible
print(rng.random(5))         # 5 uniform [0,1)
print(rng.standard_normal(3)) # 3 normal(0,1)
print(rng.integers(1, 10, 4)) # 4 ints [1,10)

配列のメモリ使用量の確認

itemsizeは1要素あたりのバイト数を、nbytesはバイト数の合計を示します。

import numpy as np

arr = np.zeros(1_000_000, dtype=np.float64)
print(arr.itemsize)   # 8
print(arr.nbytes)     # 8_000_000 (8 MB)

small = arr.astype(np.float32)
print(small.nbytes)   # 4_000_000 (4 MB)

np.emptyとnp.full

np.emptyは初期化せずに領域を確保するため高速です。np.fullは定数値で埋めます。

import numpy as np

e = np.empty((2,3))          # uninitialised — random garbage values
f = np.full((2,3), fill_value=7)
print(f)
# [[7 7 7]
#  [7 7 7]]

コピーとビュー

NumPy配列をスライスすると、ビューが返されます(コピーは作成されません)。ビューを変更すると元の配列も変更されます。独立した配列が必要な場合は.copy()を使います。

import numpy as np

arr = np.array([1, 2, 3, 4])
view = arr[1:3]
view[0] = 99
print(arr)    # [ 1 99  3  4]  — original changed!

copy = arr[1:3].copy()
copy[0] = 0
print(arr)    # unchanged

構造化配列

構造化配列は、名前付きフィールドを持つ単一のndarrayに、Cの構造体のような異なる型のデータを格納します。

import numpy as np

dt = np.dtype([('name', 'U10'), ('age', np.int32), ('score', np.float64)])
people = np.array([
    ('Alice', 30, 95.5),
    ('Bob',   25, 87.3),
], dtype=dt)
print(people['name'])   # ['Alice' 'Bob']

確認問題

arr.reshape(3, 4)は何を返しますか。

まとめ

NumPyのndarrayは、型が固定された連続メモリ上の配列です。主な属性はshape、dtype、ndim、nbytesです。スライスはビューを返すため、独立させるには.copy()を使います。メモリを節約するには、必要十分な最小のdtypeを選びます。

よくある質問

「NumPy 配列と dtype」レッスンは無料ですか?

はい。「NumPy 配列と dtype」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。

「NumPy 配列と dtype」で何を学びますか?

ndarray を作成し、dtype を理解して、配列のプロパティを調べます。 ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Python Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「NumPy 配列と dtype」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPython Academyレッスンでコードを書いて実行できますか?

はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. NumPy 配列と dtype
  2. 配列演算とブロードキャスト
  3. インデックス指定、スライス、高度なインデックス指定
  4. NumPy による線形代数
← Python Academyに戻る