5

今後のデータを反復処理してクラスを作成します。データは、numpyオブジェクトを使用せずに配列形式になっています。私のコードでは、.append別の配列を作成するためによく使用します。ある時点で、大きな配列1000x2000の1つをnumpy.arrayに変更しました。今、私はエラーの後にエラーがあります。すべての配列をndarrayに変換し始めましたが、のようなコメントは.append機能しなくなりました。行、列、またはセルを指す際に問題が発生し始めます。すべてのコードを再構築する必要があります。

「通常の配列よりもndarrayを使用することの利点とは何か」という質問に対する答えをグーグルで検索しようとしていますが、賢明な答えを見つけることができません。いつndarrayを使い始めるべきかを書いていただけますか?また、実際に両方を使用するのか、それとも1つだけに固執するのかを教えてください。

質問が初心者レベルの場合は申し訳ありませんが、私はPythonを初めて使用するので、Matlabから移動して、長所と短所を理解してください。ありがとう

4

4 に答える 4

8

NumPyとPythonの配列は、メモリに効率的に格納されるという特性を共有しています。

NumPy配列は、合計して数値を掛けることができ、たとえば、1回の関数呼び出しですべての値の正弦を計算できます。HYRYが指摘したように、それらは複数の次元を持つこともできます。Python配列ではこれを行うことはできません。

一方、Python配列は実際にに追加できます。ただし、NumPy配列は連結できることに注意してください(、、hstack()vstack())。とは言うものの、NumPy配列は、ほとんどの場合、固定数の要素を持つことを目的としています。

最初に値のリスト(またはPython配列)を繰り返し作成し、次にそれをNumPy配列に変換するのが一般的です(HYRYが述べたようにnumpy.array()、または、より効率的には、を使用して):これにより配列(または行列)の数学演算が可能になりますnumpy.frombuffer()非常に便利に実行できます(複雑な操作のための単純な構文)。または、numpy.fromiter()イテレータから配列を作成するために使用することもできます。またはloadtxt()、テキストファイルから作成します。

于 2013-02-27T11:44:37.767 に答える
7

NumPyアレイを使用する主な理由は少なくとも2つあります。

  • NumPy配列は、Pythonリストよりも必要なスペースが少なくて済みます。そのため、PythonリストよりもNumPy配列(メモリ内)でより多くのデータを処理できます。
  • NumPy配列には、PythonリストやPython配列では利用できない関数とメソッドの膨大なライブラリがあります。

はい、リストをNumPy配列に単純に変換して、コードが引き続き機能することを期待することはできません。メソッドが異なり、boolセマンティクスが異なります。最高のパフォーマンスを得るには、アルゴリズムを変更する必要がある場合もあります。

ただし、MatlabのPythonの代替品を探している場合は、NumPyの用途が間違いなく見つかります。学ぶ価値があります。

于 2013-02-27T11:50:53.850 に答える
5

array.arrayサイズを動的に変更できます。あるソースからデータを収集している場合は、を使用することをお勧めしますarray.array。しかし、これarray.arrayは1つの次元にすぎず、それを処理する計算関数はありません。したがって、データを使用して計算を行う場合は、データをに変換してnumpy.ndarray、numpyの関数を使用します。

numpy.frombuffernumpy.ndarrayオブジェクトと同じデータバッファを共有するを作成できますarray.array。データをコピーする必要がないため、高速です。

これがデモです:

import numpy as np
import array
import random

a = array.array("d")
# a for loop that collects 10 channels data
for x in range(100):
    a.extend([random.random() for _ in xrange(10)])

# create a ndarray that share the same data buffer with array a, and reshape it to 2D
na = np.frombuffer(a, dtype=float).reshape(-1, 10)

# call some numpy function to do the calculation
np.sum(na, axis=0)
于 2013-02-27T12:11:42.817 に答える
1

組み込みリストよりもNumPy配列を使用することのもう一つの大きな利点は、NumPyにネイティブCおよびC++コードがNumPy配列に直接アクセスできるようにするCAPIがあるという事実です。したがって、Cのような低水準言語で記述された多くのPythonライブラリは、Pythonリストの代わりにNumPy配列を使用することを期待しています。

参照:データ分析のためのPython:Pandas、NumPy、およびIPythonを使用したデータラングリング

于 2018-10-30T22:04:02.573 に答える