Python 在元组的元组中查找最大值和最小值
我是python新手,在查找元组的最小值和最大值时遇到一些问题。我需要他们来规范我的数据。所以,基本上,我有一个列表,是由13个数字组成的一行,每个数字代表一些东西。每个数字在列表中构成一列,我需要每个列的最大值和最小值。我尝试了索引/迭代,但不断得到一个错误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
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都是一行,其中的值组成了列,就像矩阵一样。对于获取列的最大值和最小值有什么建议吗?这仍然会为每一行提供最大值和最小值,而我需要为每一列提供最大值和最小值。每个元组都是一行,其中的值组成列,就像矩阵一样。对于获取列的最大值和最小值有什么建议吗?