Python
 Computer >> コンピューター >  >> プログラミング >> Python

NumpyのFlatten()とRavel()の違い


numpy配列を作成する方法はたくさんあります。 Numpyは、ndarrayを1Darrayに変換する2種類の方法を提供します。1つはflatten()メソッドを使用する方法で、もう1つはravel()メソッドを使用する方法です。

#Import required library, numpy
import numpy as np
#create an array from a list
arr = np.array( [ (2, 7, 3, 4), (5, 6, 9, 1)])
#flatten_output
print(arr.flatten())
#ravel_output
print(arr.ravel())

出力

[2 7 3 4 5 6 9 1]
[2 7 3 4 5 6 9 1]

上記では、両方の関数が同じリストを返すことがわかります。そのため、同じタスクに2つのメソッドがあるのはなぜですか?

以下は、flatten()メソッドとravel()メソッドの主な違いです。

arr.ravel()

  • 元の配列の唯一の参照を返す

  • 上記のarray(arr)を変更すると、元の配列の値も変更されていることがわかります。

  • ravelメソッドはメモリを占有するため、ravelはflatten()よりも高速です

  • Ravelはライブラリレベルの関数です

arr.flatten()

  • array(arr)の元のコピーを返します。

  • 上記のarray(arr)を変更しても、元の配列の値は変更されません。

  • flatten()はメモリを占有するため、flatten()はravel()よりも少し遅いです

  • これはndarrayオブジェクトのメソッドです。

#Import required library, numpy
import numpy as np
# Create a numpy array, arr
arr = np.array([(1,2,3,4),(3,1,4,2)])
# Let's print the array arr
print ("Original array:\n ", arr)
#print(arr)
# To check the dimension of array (dimension =2) and type is numpy.ndarray
print ("Dimension of original array: %d \n Type of original array: %s" % (arr.ndim,type(arr)))
print("\nOutput from ravel method: \n")
# Convert nd array to 1D array
b_arr = arr.ravel()
# Ravel only passes a view of original array to array 'b_arr'
print(b_arr)
b_arr[0]=1000
print(b_arr)
# Note here that value of original array 'arr' at also arr[0][0] becomes 1000
print(arr)
# Just to check the dimension i.e. 1 and type is same numpy.ndarray
print ("Dimension of array: %d \n Type of array: %s" % (b_arr.ndim,type(b_arr)))
print("\nOutput from flatten method: \n")
# Convert nd array to 1D array
c_arr = arr.flatten()
# Flatten passes copy of original array to 'c_arr'
print(c_arr)
c_arr[0]=0
print(c_arr)
# Note that by changing value of c_arr there is no affect on value of original array 'arr'
print(arr)
print ("Dimension of array->%d \n Type of array->%s" % (c_arr.ndim,type(c_arr)))

出力

Original array:
[[1 2 3 4]
[3 1 4 2]]
Dimension of original array: 2
Type of original array: <class 'numpy.ndarray'>
Output from ravel method:
[1 2 3 4 3 1 4 2]
[1000 2 3 4 3 1 4 2]
[[1000 2 3 4]
[ 3 1 4 2]]
Dimension of array: 1
Type of array: <class 'numpy.ndarray'>
Output from flatten method:
[1000 2 3 4 3 1 4 2]
[0 2 3 4 3 1 4 2]
[[1000 2 3 4]
[ 3 1 4 2]]
Dimension of array->1
Type of array-><class 'numpy.ndarray'>

  1. ChromiumとChromeの上位12の違い

    もちろん、後者の言葉はあなたにとって明らかになじみのある言葉であり、前者はあなたの知識にあまり影響を与えなかったでしょう。うまくいけば、Chromiumについて1、2回聞いたことがあるでしょうが、見かけの確率は、約60%の人がこの単語を1回も聞いたことがないということです。そして、残りの40%の技術に精通した人々では、20%がChromiumの正確な意味を知りません。これにより、この記事の非常に重要なことが明らかになります。つまり、「 Chromium v​​s. Chrome」の概念について説明します。 。’ ここでは、特定のパラメータに基づいて、ChromiumとChromeを広範囲に

  2. AggとCairoのMatplotlibバックエンドの違い

    レンダラー ファイルの種類 説明 AGG PNG ラスターグラフィックス-アンチグレインジオメトリエンジンを使用した高品質の画像 カイロ png、ps、pdf、svg ラスターまたはベクターグラフィックス-Cairoライブラリを使用 ステップ 図のサイズを設定し、サブプロット間およびサブプロットの周囲のパディングを調整します。 バックエンド名をAggに設定します 。 numpyを使用して5☓5行列配列を作成します。 imshow()を使用します データを画像として、つまり2Dの通常のラスターに表示する方法。 図を保存するには、 savefig()を使用します