用語比較
np.ravelとflattenの違い|必要なときだけコピーするか、常にコピーを返すか(Python3データ分析)
np.ravel と flatten の違いはコピーの作り方で、ravel は必要なときだけコピーし、flatten は常にコピーを返します。どちらも多次元配列を1次元にします。
結果の並び方は、どちらも order 引数の既定値 'C' で同じです。
この記事の目次
この記事の根拠と出典
各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。
np.ravelとndarray.flattenの要点
np.ravel
1次元の配列を返す。コピーは必要なときだけ作る。order の既定値は 'C'。'K' も指定できる。
ndarray.flatten
1次元に平らにしたコピーを返す。order の既定値は 'C'。メソッドとして a.flatten() の形で呼ぶ。
違いを表で確認
| 比較軸 | np.ravel | ndarray.flatten |
|---|---|---|
| コピーの扱い | コピーは必要なときだけ作る | 常にコピーを返す |
| 呼び方 | np.ravel(a) と、a.ravel() のどちらでも呼べる | a.flatten() とメソッドで呼ぶ |
| order 引数の既定値 | 'C'(行方向の順) | 'C'(行方向の順) |
| order に指定できる値 | 'C'、'F'、'A'、'K' | 'C'、'F'、'A'、'K' |
Python3エンジニア認定データ分析試験の学習に使う書籍(Amazon)
PRどこで迷っているかを切り分ける
結果を書き換えても、元の配列を変えたくない人
flatten を使います。flatten は常にコピーを返すので、結果を書き換えても元の配列は変わりません。
読むだけで、コピーの手間を省きたい人
ravel を使います。ravel はコピーを必要なときだけ作るので、コピーを避けられる場合があります。
列方向の順に並べたい人
どちらも order='F' を渡します。公式の例では、2行3列の配列を order='F' で平らにすると [1, 4, 2, 5, 3, 6] になります。
具体例で使い分ける
例 1
ravel で平らにする
公式の例の x = np.array([[1, 2, 3], [4, 5, 6]]) を見ます。
- x は2行3列の配列です。
- np.ravel(x) の結果は array([1, 2, 3, 4, 5, 6]) で、行ごとに並びます。
- np.ravel(x, order='F') の結果は array([1, 4, 2, 5, 3, 6]) で、列ごとに並びます。
結論: order の既定値 'C' は行方向、'F' は列方向の順です。
例 2
flatten で平らにする
公式の例の a = np.array([[1, 2], [3, 4]]) を見ます。
- a は2行2列の配列です。
- a.flatten() の結果は array([1, 2, 3, 4]) です。
- a.flatten('F') の結果は array([1, 3, 2, 4]) です。
結論: flatten も order で並びを選べます。結果は元の配列のコピーです。
例 3
reshape(-1) との関係
公式は、ravel が reshape(-1, order=order) と等価だと書いています。
- 公式の例では、np.ravel(x) と x.reshape(-1) は、どちらも array([1, 2, 3, 4, 5, 6]) です。
- 公式は、ビューをできるだけ得たいときは arr.reshape(-1) がよい場合があると書いています。
- ただし ravel は order に 'K' を指定できますが、reshape は指定できません。
結論: 並びの指定が 'K' なら ravel、ビューを優先するなら reshape(-1) を検討します。
問題文から答えを選ぶ手順
- 1
元の配列を守りたいかを決める
結果を書き換える予定があり、元の配列を変えたくないなら flatten。読むだけなら ravel でもよい。
- 2
並びを決める
行方向なら 'C'(既定値)、列方向なら 'F' を渡します。
- 3
呼び方を決める
関数の形で書くなら np.ravel(a)、メソッドの形なら a.flatten() か a.ravel() です。
試験での見分け方
- 1常にコピーが欲しいときは flatten を使う。
- 2コピーを必要なときだけにしたいときは ravel を使う。
- 3並びは order で選ぶ。既定値はどちらも 'C'。
- 4'K' の指定は、reshape では使えず、ravel と flatten では使える。
誤答しやすい選択肢
ravel も常にコピーを返すと考える
修正: 公式は、ravel は「A copy is made only if needed」と書いています。コピーを作らないことがあります。
flatten は元の配列と同じ領域を指すと考える
修正: flatten は常にコピーを返します。結果を書き換えても元の配列は変わりません。
order='F' の結果を行ごとの並びだと考える
修正: 'F' は列方向の順です。2行3列の [[1, 2, 3], [4, 5, 6]] は [1, 4, 2, 5, 3, 6] になります。
確認問題
Q1常にコピーを返すのは、ravelとflattenのどちらか?
答え: flatten
公式は、flatten を「Return a copy」と説明し、ravel は「A copy is made only if needed」と説明しています。
Q2x = np.array([[1, 2, 3], [4, 5, 6]]) のとき、np.ravel(x, order='F') の結果は?
答え: array([1, 4, 2, 5, 3, 6])
'F' は列方向の順です。1列目の 1, 4、2列目の 2, 5、3列目の 3, 6 の順に並びます。
Q3a = np.array([[1, 2], [3, 4]]) のとき、a.flatten() の結果は?
答え: array([1, 2, 3, 4])
既定値の 'C' は行方向の順なので、1行目、2行目の順に並びます。
Q4order に 'K' を指定できるのは、ravelとreshapeのどちらか?
答え: ravel
公式は、ravel は order に K を指定できるが、reshape は指定できないと書いています。
到達チェック
- ravel と flatten の違いを、コピーの言葉で説明できる
- order の既定値が 'C' であることを言える
- order='F' の結果を計算できる
- reshape(-1) との関係を言える
関連ページで確認する
同じ資格で次に知りたいこと
- np.zerosとnp.emptyの違い|0で埋めるか、初期化しないか(Python3データ分析)
NumPyのnp.zeros(0で埋めた配列)とnp.empty(初期化しない配列)の違いを、中身の値、速度、使いどころで整理します。NumPy公式リファレンスの例のnp.zeros(s)(s=(2, 2))が2行2列の0になる一方、np.empty([2, 2])の中身は不定になる点つきです。
- np.stdとpandasのstdの違い|ddofの既定値は0と1(Python3データ分析)
NumPyのnp.stdとpandasのSeries.std・DataFrame.stdで、同じデータなのに標準偏差が違って見える理由を、ddofの既定値(NumPyは0、pandasは1)で整理します。pandas公式の例のpd.Series([1, 2, 3])が1.0と0.816496580927726になる計算つきです。
- np.sortとnp.argsortの違い|並べ替えた値か、並べ替える順番の添字か(Python3データ分析)
NumPyのnp.sort(並べ替えた配列のコピー)とnp.argsort(並べ替える順番を表す添字の配列)の違いを、返り値、元の配列との関係、使いどころで整理します。NumPy公式リファレンスの例のx = np.array([3, 1, 2])でnp.argsort(x)がarray([1, 2, 0])になる点つきです。
よくある質問
Qnp.ravelとflattenの違いは?
ravel はコピーを必要なときだけ作り、flatten は常にコピーを返します。order の既定値は、どちらも 'C' です。
Qravelはreshape(-1)と同じですか?
公式は、ravel が reshape(-1, order=order) と等価だと書いています。ただし order の 'K' は、reshape では使えず、ravel と flatten では使えます。
Qorder='F'は何を意味しますか?
公式は、'F' を列方向(Fortran風)の順で読むことだと説明しています。
Qデータ分析試験の範囲?
本サイトの第3章 NumPy で扱います。出題の形式や範囲は、受験前に公式の案内で確認してください。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: AI資格ドリル編集部(運営者情報を見る)
