質問
Python で 1 次元配列を作成している場合、NumPy パッケージを使用する利点はありますか?
解決
それはすべて、アレイをどうするかによって決まります。単純なデータ型の配列を作成して I/O を実行するだけの場合、 配列 モジュールは問題なく動作します。
一方、何らかの数値計算を実行したい場合、配列モジュールはそれをサポートしません。 ナムピー (そして サイピー) 配列と特別な関数の間でさまざまな操作が可能で、科学的な作業だけでなく、高度な画像操作や、大量のデータを使って効率的な計算を実行する必要がある一般的な用途にも役立ちます。
Numpy はさらに柔軟性も高くなります。あらゆるタイプの Python オブジェクトの配列をサポートし、独自のオブジェクトが準拠している場合は「ネイティブに」対話することもできます。 アレイインターフェース.
他のヒント
これが役立つと思われる人の利益のための小さなブートストラップ(@dF.による優れた回答に続きます):
import numpy as np
from array import array
# Fixed size numpy array
def np_fixed(n):
q = np.empty(n)
for i in range(n):
q[i] = i
return q
# Resize with np.resize
def np_class_resize(isize, n):
q = np.empty(isize)
for i in range(n):
if i>=q.shape[0]:
q = np.resize(q, q.shape[0]*2)
q[i] = i
return q
# Resize with the numpy.array method
def np_method_resize(isize, n):
q = np.empty(isize)
for i in range(n):
if i>=q.shape[0]:
q.resize(q.shape[0]*2)
q[i] = i
return q
# Array.array append
def arr(n):
q = array('d')
for i in range(n):
q.append(i)
return q
isize = 1000
n = 10000000
出力は次のようになります。
%timeit -r 10 a = np_fixed(n)
%timeit -r 10 a = np_class_resize(isize, n)
%timeit -r 10 a = np_method_resize(isize, n)
%timeit -r 10 a = arr(n)
1 loop, best of 10: 868 ms per loop
1 loop, best of 10: 2.03 s per loop
1 loop, best of 10: 2.02 s per loop
1 loop, best of 10: 1.89 s per loop
array.array の方がわずかに高速で、「API」を使用すると手間が省けるようですが、単に double を保存する以上のことが必要な場合は、(正しく使用されていれば) numpy.resize は結局のところ悪い選択ではありません。
所属していません StackOverflow