AI資格ドリル
資格を選ぶ

用語比較

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.ravelndarray.flatten
コピーの扱いコピーは必要なときだけ作る常にコピーを返す
呼び方np.ravel(a) と、a.ravel() のどちらでも呼べるa.flatten() とメソッドで呼ぶ
order 引数の既定値'C'(行方向の順)'C'(行方向の順)
order に指定できる値'C'、'F'、'A'、'K''C'、'F'、'A'、'K'

Python3エンジニア認定データ分析試験の学習に使う書籍(Amazon)

PR

ほかの資格を含む参考書・問題集の一覧を見る

どこで迷っているかを切り分ける

01

結果を書き換えても、元の配列を変えたくない人

flatten を使います。flatten は常にコピーを返すので、結果を書き換えても元の配列は変わりません。

02

読むだけで、コピーの手間を省きたい人

ravel を使います。ravel はコピーを必要なときだけ作るので、コピーを避けられる場合があります。

03

列方向の順に並べたい人

どちらも 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. 1

    元の配列を守りたいかを決める

    結果を書き換える予定があり、元の配列を変えたくないなら flatten。読むだけなら ravel でもよい。

  2. 2

    並びを決める

    行方向なら 'C'(既定値)、列方向なら 'F' を渡します。

  3. 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) との関係を言える

同じ資格で次に知りたいこと

よくある質問

Qnp.ravelとflattenの違いは?

A

ravel はコピーを必要なときだけ作り、flatten は常にコピーを返します。order の既定値は、どちらも 'C' です。

Qravelはreshape(-1)と同じですか?

A

公式は、ravel が reshape(-1, order=order) と等価だと書いています。ただし order の 'K' は、reshape では使えず、ravel と flatten では使えます。

Qorder='F'は何を意味しますか?

A

公式は、'F' を列方向(Fortran風)の順で読むことだと説明しています。

Qデータ分析試験の範囲?

A

本サイトの第3章 NumPy で扱います。出題の形式や範囲は、受験前に公式の案内で確認してください。

次に見る比較

執筆: AI資格ドリル編集部(運営者情報を見る)