Python 在元组的元组中查找最大值和最小值

Python 在元组的元组中查找最大值和最小值,python,tuples,normalization,Python,Tuples,Normalization,我是python新手,在查找元组的最小值和最大值时遇到一些问题。我需要他们来规范我的数据。所以,基本上,我有一个列表,是由13个数字组成的一行,每个数字代表一些东西。每个数字在列表中构成一列,我需要每个列的最大值和最小值。我尝试了索引/迭代,但不断得到一个错误 max_j = max(j) TypeError: 'float' object is not iterable 任何帮助都将不胜感激 代码假设数据集是元组的元组,例如1,3,4,5,6,7,…,5,6,7,3,6,73,2……3,4

我是python新手,在查找元组的最小值和最大值时遇到一些问题。我需要他们来规范我的数据。所以,基本上,我有一个列表,是由13个数字组成的一行,每个数字代表一些东西。每个数字在列表中构成一列,我需要每个列的最大值和最小值。我尝试了索引/迭代,但不断得到一个错误

max_j = max(j)

TypeError: 'float' object is not iterable
任何帮助都将不胜感激

代码假设数据集是元组的元组,例如1,3,4,5,6,7,…,5,6,7,3,6,73,2……3,4,5,6,3,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)

您可以使用zip*。。。。使用listzip*。。。在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)

您可以使用zip*。。。。使用listzip*。。。在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)

这听起来确实像是非内置模块的工作,或者可能是模块的工作,这取决于您的需要

在应用程序上添加额外的依赖项不应该轻易完成,但是如果您在矩阵式数据上做了大量工作,那么如果您在整个应用程序中使用上述模块之一,那么您的代码可能会更快、更可读

我不建议将列表列表转换为numpy数组,然后再转换回来,只是为了得到这个结果——最好使用Jannes answer的纯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)

这听起来确实像是非内置模块的工作,或者可能是模块的工作,这取决于您的需要

在应用程序上添加额外的依赖项不应该轻易完成,但是如果您在矩阵式数据上做了大量工作,那么如果您在整个应用程序中使用上述模块之一,那么您的代码可能会更快、更可读

我不建议将列表列表转换为numpy数组,然后再转换回来,只是为了得到这个结果——最好使用Jannes answer的纯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)
我们有嵌套的_tuple=1,2,3,4,5,6,7,8,9。 首先,我们需要使其正常化。肾盂道:

flat_tuple = [x for row in nested_tuple for x in row]
输出:[1,2,3,4,5,6,7,8,9]这是一个列表

将其移动到tuple:tupleflat\u tuple,获取最大值:maxflat\u tuple,获取最小值:minflat\u tuple

我们有嵌套的\u tuple=1,2,3,4,5,6,7,8,9。 首先,我们需要使其正常化。肾盂道:

flat_tuple = [x for row in nested_tuple for x in row]
输出:[1,2,3,4,5,6,7,8,9]这是一个列表


将其移动到tuple:tupleflat\u tuple,get max value:maxflat\u tuple,get min value:minflat\u tuple

这仍然为每一行提供max和min,而我需要为每一列提供max和min,每一个tuple都是一行,其中的值组成了列,就像矩阵一样。对于获取列的最大值和最小值有什么建议吗?这仍然会为每一行提供最大值和最小值,而我需要为每一列提供最大值和最小值。每个元组都是一行,其中的值组成列,就像矩阵一样。对于获取列的最大值和最小值有什么建议吗?