1. ホーム
  2. python

[解決済み] numpyのflatten関数とravel関数の違いは何ですか?

2022-03-26 17:50:19

質問

import numpy as np
y = np.array(((1,2,3),(4,5,6),(7,8,9)))
OUTPUT:
print(y.flatten())
[1   2   3   4   5   6   7   8   9]
print(y.ravel())
[1   2   3   4   5   6   7   8   9]

どちらの関数も同じリストを返します。 では、同じ仕事をする2つの異なる関数の必要性は何でしょうか?

どのように解決するのか?

現在のAPIがそうです。

  • flatten は常にコピーを返します。
  • ravel は、可能な限り元の配列のビューを返します。これは印刷された出力では見えませんが、ravel が返す配列を変更すると、元の配列の項目が変更される可能性があります。メモリがコピーされないので ravel の方が速いことが多いですが、返す配列の変更にはより注意しなければなりません。
  • reshape((-1,)) は、配列のストライドが許す限り、ビューを取得します。