2

次のループを繰り返すたびに、50x1の次元のベクトルが生成されます。ループからのすべてのベクトルを単一のデータ構造にまとめて格納します。

  def get_y_hat(y_bar, x_train, theta_Ridge_Matrix):
     print theta_Ridge_Matrix.shape
     print theta_Ridge_Matrix.shape[0]
     for i in range(theta_Ridge_Matrix.shape[0]):
        yH = np.dot(x_train, theta_Ridge_Matrix[i].T)
        print yH

どのデータ構造を使用する必要がありますか?Pythonは初めてですが、オンラインで調査した内容に基づいて、2つのオプションがあります。numpy配列とリストのリストです。

このメソッドの外で、後で50要素の各ベクトルにアクセスする必要があります。私が保存する200から500のベクトルがあるかもしれません。

誰かが私にそのようなデータ構造のサンプルコードも教えてもらえますか

ありがとう

4

4 に答える 4

2

ループからのデータをaに格納し、dictそれを(numpy配列の上に構築された)に変換するよりもpandas.Dataframe効率的なソリューションであり、データ全体または単一のベクトルとしてさらに処理できるようになると思います。

例として:

import pandas as pd
import numpy as np

data = {}
# this would be your loop
for i in range(50):
    data['run_%02d' % i] = np.random.randn(50)
data = pd.DataFrame(data) # sorted keys of the dict will be the columns 

属性として、またはキーを介して単一のベクトルにアクセスできます。

print data['run_42'].describe() # or data.run_42.describe()

count    50.000000
mean      0.021426
std       1.027607
min      -2.472225
25%      -0.601868
50%       0.014949
75%       0.641488
max       2.391289

または、データ全体をさらに分析します。

print data.mean()

run_00   -0.015224
run_01   -0.006971
..
run_48   -0.115935
run_49    0.147738

または、matplotlib(質問にタグを付けているためmatplotlib)を使用してデータを確認します。

data.boxplot(rot=90) 
plt.tight_layout()

example_boxplot

于 2012-11-20T07:16:17.780 に答える
0

あなたは簡単に行うことができます

import numpy as np

def get_y_hat(y_bar, x_train, theta_Ridge_Matrix):
     print theta_Ridge_Matrix.shape
     print theta_Ridge_Matrix.shape[0]
     yH = np.empty(theta_Ridge_Matrix.shape[0], theta_Ridge_Matrix[0].shape[0])
     for i in range(theta_Ridge_Matrix.shape[0]):
        yH[i, :] = np.dot(x_train, theta_Ridge_Matrix[i].T)
     print yH

を3D配列に格納する場合は、を使用して作業を実行theta_Ridge_Matrixすることもできます。これは、行列の最後から2番目の次元を合計します。np.dotyH = np.dot(x_train, theta_Ridge_Matrix)

于 2012-11-19T08:21:53.370 に答える
0

numpy配列については、これまで使用したことがないのでコメントできませんが、リストのリストを使用するために、Pythonにはすでにサポートが組み込まれています。

たとえば、そうするために:

AList = [1, 2, 3]
BList = [4, 5, 6]
CList = [7, 8, 9]
List_of_Lists = []

List_of_Lists.append(AList)
List_of_Lists.append(BList)
List_of_Lists.append(CList)

print(List_of_Lists)

それは降伏するでしょう:

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

たとえば、リストを最初からすべて初期化する代わりに、リストを作成する方法は他にもあります。

ListCreator = int(input('Input how many lists are needed: '))
ListofLists = [[] for index in range(ListCreator)]

それについてはもっと多くの方法がありますが、あなたがそれをどのように実装する予定かはわかりません。

于 2012-11-18T06:51:06.143 に答える
0

インストールする必要があるため、numpyを使用することをお勧めします

このサイトのウィンドウ:

http://sourceforge.net/projects/numpy/files/NumPy/

あなたがそれをどのように使うことができるかのいくつかの例。

import numpy as np

配列を作成し、matという名前を付けます

>>> mat = np.random.randn(2,3)
>>> mat
array([[ 1.02063865, 1.52885147, 0.45588211],
       [-0.82198131, 0.20995583, 0.31997462]])

配列は動詞「T」を使用して転置されます

>>> mat.T
array([[ 1.02063865, -0.82198131],
       [ 1.52885147, 0.20995583],
       [ 0.45588211, 0.31997462]])

配列の形状は、\verb"reshape"メソッドを使用して変更されます

>>> mat = np.random.randn(3,6)
array([[ 2.01139326, 1.33267072, 1.2947112 , 0.07492725, 0.49765694,
         0.01757505],
       [ 0.42309629, 0.95921276, 0.55840131, -1.22253606, -0.91811118,
         0.59646987],
       [ 0.19714104, -1.59446001, 1.43990671, -0.98266887, -0.42292461,
        -1.2378431 ]])
>>> mat.reshape(2,9)
array([[ 2.01139326, 1.33267072, 1.2947112 , 0.07492725, 0.49765694,
         0.01757505, 0.42309629, 0.95921276, 0.55840131],
       [-1.22253606, -0.91811118, 0.59646987, 0.19714104, -1.59446001,
         1.43990671, -0.98266887, -0.42292461, -1.2378431 ]])

\ verb "shape"属性を使用して、変数の形状を変更できます。

>>> mat = np.random.randn(4,3)
>>> mat.shape
(4, 3)
>>> mat
array([[-1.47446507, -0.46316836, 0.44047531],
       [-0.21275495, -1.16089705, -1.14349478],
       [-0.83299338, 0.20336677, 0.13460515],
       [-1.73323076, -0.66500491, 1.13514327]])
>>> mat.shape = 2,6
>>> mat.shape
(2, 6)

>>> mat
array([[-1.47446507, -0.46316836, 0.44047531, -0.21275495, -1.16089705,
        -1.14349478],
       [-0.83299338, 0.20336677, 0.13460515, -1.73323076, -0.66500491,
         1.13514327]])
于 2012-11-19T10:40:34.167 に答える