numpyのndarrayとarrayの違いは何ですか?


回答:


220

numpy.arrayを作成するための便利な関数ndarrayです。それ自体はクラスではありません。

を使用して配列を作成することもできますnumpy.ndarrayが、これは推奨される方法ではありません。のドキュメント文字列からnumpy.ndarray

配列はarrayzerosまたはempty... を使用して構築する必要があります。ここで指定するパラメーターはndarray(...)、配列をインスタンス化するための低レベルのメソッド()を参照します。

実装の大部分はCコードにあり、ここではマルチ配列にありますにありますが ndarrayインターフェイスを確認できます。

https://github.com/numpy/numpy/blob/master/numpy/core/numeric.py


1
array()はarray_getarray()のcore / src / multiarray / methods.cに実装されていると思います。
flxb 2013

6
np.array私がよくするように、それがクラスではないことを忘れた場合、これはあなたを噛みます。x = np.array([1,2.1,3]) if isinstance(x,np.array): # will give you a TypeError
Steve L

4
まだndarrayの使用を避ける必要がある理由はまだわかりませんか?それは低レベルですか?
GabrielChu 2018

@flxb:いいえ、array_getarrayの実装ですnumpy.ndarray.__array__。少なくとも現在の実装ではnumpy.arrayから始まり_array_fromobjectます。
user2357112は18:52にMonica

2
なぜそれが推奨されないのですか?
NoName


31

numpy.arrayとnumpy.ndarrayの違いを示すコード例のほんの数行

ウォームアップステップ:リストの作成

a = [1,2,3]

タイプを確認してください

print(type(a))

あなたは得るでしょう

<class 'list'>

np.arrayを使用して(リストから)配列を作成します

a = np.array(a)

または、ウォームアップの手順をスキップして、直接

a = np.array([1,2,3])

タイプを確認してください

print(type(a))

あなたは得るでしょう

<class 'numpy.ndarray'>

それはあなたに伝えます numpyの配列の型はnumpy.ndarrayです

タイプで確認することもできます

isinstance(a, (np.ndarray))

そしてあなたは得るでしょう

True

次の2行のいずれかでエラーメッセージが表示されます

np.ndarray(a)                # should be np.array(a)
isinstance(a, (np.array))    # should be isinstance(a, (np.ndarray))

4

numpy.ndarray()はクラスですが、numpy.array()は作成するメソッド/関数ndarrayです。

numpy docsでは、ndarrayクラスから配列を作成したい場合は、引用されているように2つの方法でそれを行うことができます:

1- array()zeros()またはempty()メソッドの使用: 配列は、配列、ゼロ、または空を使用して構築する必要があります(以下の「関連項目」セクションを参照)。ここで指定するパラメーターはndarray(…)、配列をインスタンス化するための低レベルのメソッド()を参照します。

2- ndarrayクラスから直接: を使用して配列を作成する2つのモードがあります__new__。bufferがNoneの場合、shape、dtype、orderのみが使用されます。bufferがbufferインターフェースを公開するオブジェクトである場合、すべてのキーワードが解釈されます。

以下の例では、バッファ値を割り当てていないため、ランダムな配列を示しています。

np.ndarray(shape=(2,2), dtype=float, order='F', buffer=None)

array([[ -1.13698227e+002,   4.25087011e-303],
       [  2.88528414e-306,   3.27025015e-309]])         #random

別の例は、配列のオブジェクトをバッファの例に割り当てることです。

>>> np.ndarray((2,), buffer=np.array([1,2,3]),
...            offset=np.int_().itemsize,
...            dtype=int) # offset = 1*itemsize, i.e. skip first element
array([2, 3])

上記の例から、「バッファ」にリストを割り当てることができず、numpy.array()を使用してバッファのndarrayオブジェクトを返す必要があったことがわかります

結論:オブジェクトnumpy.array()を作成する場合に使用しnumpy.ndarray()ます」


0

私はnp.array()あなたが注文をnp.isfortran()言っているのと同じようにCを作成することしかできないと思います、それを使用してチェックするとfalseと言います。ただし、np.ndarrray()指定した順序で指定された順序に基づいて作成されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.