3

私はPythonを初めて使用し、タプルのタプルの最小値と最大値を見つけるのに問題があります。データを正規化するためにそれらが必要です。つまり、基本的に、それぞれが何かを表す13個の数字の行であるリストがあります。各番号はリストの列を作成し、各列にとが必要maxですmin。インデックス作成/反復を試みましたが、エラーが発生し続けます

max_j = max(j)

TypeError: 'float' object is not iterable

どんな助けもいただければ幸いです!

コードは次のとおりです(data_set_tupがタプルのタプルであると仮定します。例:((1,3,4,5,6,7、...)、(5,6,7,3,6,73,2 ...) ...(3,4,5,6,3,2,2 ...))また、正規化された値を使用して新しいリストを作成したいと思います。

normal_list = []

for i in data_set_tup:

    for j in i[1:]: # first column doesn't need to be normalised
        max_j = max(j)
        min_j = min(j)
        normal_j = (j-min_j)/(max_j-min_j)
        normal_list.append(normal_j)
    normal_tup = tuple(normal_list)
4

3 に答える 3

4

を使用して、行を列に、またはその逆に転置できますzip(*...)。(list(zip(*...))Python 3で使用)

cols = zip(*data_set_tup)
normal_cols = [cols[0]] # first column doesn't need to be normalised
for j in cols[1:]:
    max_j = max(j)
    min_j = min(j)
    normal_cols.append(tuple((k-min_j)/(max_j-min_j) for k in j)

normal_list = zip(*normal_cols)
于 2012-10-29T11:44:25.173 に答える
0

これは、必要に応じて、組み込みのnumpyモジュール、またはおそらくpandasモジュールの仕事のように聞こえます。

アプリケーションへの依存関係を追加することは簡単に行うべきではありませんが、マトリックスのようなデータで多くの作業を行う場合、アプリケーション全体で上記のモジュールのいずれかを使用すると、コードがより高速で読みやすくなる可能性があります。

リストのリストをnumpy配列に変換して、この単一の結果を得るためだけに元に戻すことはお勧めしません。Jannesanswerの純粋なpythonメソッドを使用することをお勧めします。また、あなたがPythonの初心者であることを考えると、numpyは今のところやり過ぎかもしれません。しかし、あなたの質問は、これがオプションであることを指摘する答えに値すると思います。

これは、これがnumpyでどのように機能するかを示すコンソールのステップバイステップの図です。

>>> import numpy as np
>>> a = np.array([[1,3,4,5,6],[5,6,7,3,6],[3,4,5,6,3]], dtype=float)
>>> a
array([[ 1.,  3.,  4.,  5.,  6.],
       [ 5.,  6.,  7.,  3.,  6.],
       [ 3.,  4.,  5.,  6.,  3.]])
>>> min = np.min(a, axis=0)
>>> min
array([1, 3, 4, 3, 3])
>>> max = np.max(a, axis=0)
>>> max
array([5, 6, 7, 6, 6])
>>> normalized = (a - min) / (max - min) 
>>> normalized
array([[ 0.        ,  0.        ,  0.        ,  0.66666667,  1.        ],
       [ 1.        ,  1.        ,  1.        ,  0.        ,  1.        ],
       [ 0.5       ,  0.33333333,  0.33333333,  1.        ,  0.        ]])

したがって、実際のコードでは:

import numpy as np

def normalize_by_column(a):
    min = np.min(a, axis=0)
    max = np.max(a, axis=0)
    return (a - min) / (max - min)
于 2012-10-29T12:45:22.767 に答える
0

ありますnested_tuple = ((1, 2, 3), (4, 5, 6), (7, 8, 9))。まず、正規化する必要があります。Pythonの方法:

flat_tuple = [x for row in nested_tuple for x in row]

出力:[1、2、3、4、5、6、7、8、9]# it's a list

タプルに移動します:、tuple(flat_tuple)最大値を取得します:max(flat_tuple)、最小値を取得します:min(flat_tuple)

于 2015-05-20T09:36:55.963 に答える