Python初心者がNumPyを使い始めるときに、よくある間違いがあります。
それは、
numpy.arrange(...)
と書いてエラーになる!
正しくは:
import numpy as np
np.arange(...) # 「arange」が正解
「array(配列)」と「range(範囲)」を組み合わせた言葉なので「arange」が正しい関数名です。
この記事では、そんなnp.arange
の使い方・応用例・よくあるエラーまでを詳しく説明します。
基本的な使い方

基本の書き方
import numpy as np
np.arange(開始, 終了, ステップ)
説明:
- 開始:どの数から始めるか
- 終了:どの数まで作るか(この数は含まれません)
- ステップ:数と数の間隔
例1:0から9までの整数を作る
import numpy as np
result = np.arange(10)
print(result)
# 結果: [0 1 2 3 4 5 6 7 8 9]
説明:
- 引数がひとつだけの場合、0から始まって指定した数の手前まで作られます
10
を指定しましたが、結果には含まれていないことに注意
例2:1から10まで2刻み
result = np.arange(1, 11, 2)
print(result)
# 結果: [1 3 5 7 9]
説明:
- 1から始まって、2ずつ増えていきます
- 11は含まれないので、9で終わります
例3:小数も使える
result = np.arange(0, 1, 0.2)
print(result)
# 結果: [0. 0.2 0.4 0.6 0.8]
説明:
- ステップに小数を指定することもできます
- 1.0は含まれないので、0.8で終わります
例4:逆順(減少)も可能
result = np.arange(10, 0, -2)
print(result)
# 結果: [10 8 6 4 2]
説明:
- ステップに負の数を指定すると、逆順で作れます
まとめ
arange
は開始・終了・間隔を指定して配列を作る便利な関数- Pythonの
range()
と似ていますが、NumPy配列を作ります
arangeとlinspaceの違い

関数 | 指定するもの | 特徴 | 使う場面 |
---|---|---|---|
arange() | ステップ(刻み幅) | 間隔を決める | 単純な連続数字 |
linspace() | 要素数(分割数) | 個数を決める | 精密な等間隔 |
arangeは「ステップ指定」
import numpy as np
result = np.arange(0, 1, 0.3)
print(result)
# 結果: [0. 0.3 0.6 0.9]
特徴:
- ステップ(0.3)を指定するため、終了値(1.0)は含まれないことがあります
- 何個の要素ができるかは、計算してみないとわかりません
linspaceは「個数指定」
import numpy as np
result = np.linspace(0, 1, 5)
print(result)
# 結果: [0. 0.25 0.5 0.75 1. ]
特徴:
- 要素数(5個)を指定するため、開始から終了まできっちり分割されます
- 終了値も含まれます
どちらを使うべき?
# グラフ用のx軸を作るとき
x1 = np.arange(0, 10, 0.5) # 0.5刻みで作りたい
x2 = np.linspace(0, 10, 21) # 21個の点で分割したい
# データ分析で連番を作るとき
indices = np.arange(100) # 0から99までの連番
# 実験データで等間隔の測定点を作るとき
measurement_points = np.linspace(0, 100, 11) # 0〜100を10等分
まとめ
- 間隔を決めたい →
arange
- 個数を決めたい →
linspace
よくあるエラーと注意点
注意点1:「終了値が含まれない」
import numpy as np
result = np.arange(0, 5)
print(result)
# 結果: [0 1 2 3 4] ← 5は含まれない!
理由:
- Pythonの
range()
と同じ仕様です - 「5未満」という意味になります
対策:
# 5まで含めたい場合
result = np.arange(0, 6) # 終了値を1つ多く指定
print(result)
# 結果: [0 1 2 3 4 5]
注意点2:小数ステップでの精度誤差
import numpy as np
result = np.arange(0, 1, 0.1)
print(result)
# 結果: [0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
print(len(result)) # 10個のはず
問題: コンピューターの小数計算の誤差により、期待した個数にならない場合があります
対策1:linspaceを使う
result = np.linspace(0, 0.9, 10)
print(result)
# 結果: [0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
対策2:整数で作ってから割る
result = np.arange(0, 10) / 10
print(result)
# 結果: [0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
注意点3:データ型に注意
import numpy as np
# 整数だけを使うと整数型の配列
int_array = np.arange(0, 5)
print(int_array.dtype) # 結果: int64
# 小数を使うと浮動小数点型の配列
float_array = np.arange(0, 5, 0.5)
print(float_array.dtype) # 結果: float64
明示的に型を指定する方法:
# 整数型で作る
result = np.arange(0, 5, dtype=int)
# 浮動小数点型で作る
result = np.arange(0, 5, dtype=float)
応用例:実践的な使い方

応用1:2次元配列への変換
import numpy as np
# 12個の連続数字を作って、3行4列に変換
result = np.arange(12).reshape(3, 4)
print(result)
# 結果:
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
説明:
reshape()
を使うと、1次元配列を多次元配列に変換できます- データ分析でよく使われるテクニックです
応用2:条件をつけてフィルタリング
import numpy as np
# 0から9までの配列を作る
numbers = np.arange(10)
print(f"元の配列: {numbers}")
# 偶数だけを取り出す
even_numbers = numbers[numbers % 2 == 0]
print(f"偶数のみ: {even_numbers}")
# 5より大きい数を取り出す
large_numbers = numbers[numbers > 5]
print(f"5より大きい: {large_numbers}")
結果:
元の配列: [0 1 2 3 4 5 6 7 8 9]
偶数のみ: [0 2 4 6 8]
5より大きい: [6 7 8 9]
応用3:グラフ用のデータ作成
import numpy as np
import matplotlib.pyplot as plt
# x軸のデータを作成(0から2πまで0.1刻み)
x = np.arange(0, 2 * np.pi, 0.1)
# sin波のy軸データを計算
y = np.sin(x)
# グラフを描画
plt.plot(x, y)
plt.title('sin波のグラフ')
plt.xlabel('x')
plt.ylabel('sin(x)')
plt.show()
説明:
- グラフを描くときのx軸データ作成によく使われます
- 数学関数のグラフ化にとても便利です
応用4:データ分析での連番作成
import numpy as np
import pandas as pd
# 100個のサンプルデータのインデックスを作成
sample_ids = np.arange(1, 101) # 1から100まで
# ランダムなデータと組み合わせてDataFrameを作成
np.random.seed(42) # 再現可能な結果のため
data = {
'sample_id': sample_ids,
'value': np.random.normal(50, 10, 100) # 平均50、標準偏差10の正規分布
}
df = pd.DataFrame(data)
print(df.head())
結果:
sample_id value
0 1 54.967141
1 2 47.617441
2 3 64.768854
3 4 52.302986
4 5 54.658191
PythonのrangeとNumPyのarangeの違い
特徴 | range() | np.arange() |
---|---|---|
返り値の型 | range オブジェクト | NumPy配列 |
小数の対応 | ×(整数のみ) | ○ |
数学的計算 | × | ○ |
メモリ効率 | ○(遅延評価) | △(配列を作成) |
使い分けの例
import numpy as np
# for文で使うだけなら range
for i in range(10):
print(i)
# 数学的計算をするなら arange
numbers = np.arange(10)
squared = numbers ** 2 # 全要素を一度に2乗
print(squared)
# 結果: [ 0 1 4 9 16 25 36 49 64 81]
# 小数が必要なら arange
decimal_numbers = np.arange(0, 1, 0.1)
まとめ

操作内容 | コマンド例 | 使う場面 |
---|---|---|
基本的な整数配列 | np.arange(10) | 連番が欲しい |
範囲と間隔を指定 | np.arange(0, 10, 2) | 特定の刻みで数字を作りたい |
小数の配列 | np.arange(0, 1, 0.1) | 細かい刻みが必要 |
2次元配列への変換 | np.arange(12).reshape(3, 4) | 行列を作りたい |
条件フィルタ | arr[arr > 5] | 条件に合うデータだけ取得 |
精密な等間隔 | np.linspace(0, 1, 11) | きっちり分割したい |
よくある質問と回答
Q: なぜ「arrange」ではなく「arange」なの?
A: 「array(配列)」と「range(範囲)」を組み合わせた造語だからです。英語の「arrange(整理する)」とは関係ありません。
Q: rangeとarangeどちらを使うべき?
A:
- 単純なループなら
range()
- 数学計算や配列操作なら
np.arange()
- 小数が必要なら
np.arange()
Q: 終了値を含めたいときはどうする?
A: 終了値に1を足すか、np.linspace()
を使いましょう。
# 方法1: 終了値に1を足す
np.arange(0, 11) # 0から10まで
# 方法2: linspaceを使う
np.linspace(0, 10, 11) # 0から10まで11個
コメント