获取列表/数组的最小值的问题

Posted

技术标签:

【中文标题】获取列表/数组的最小值的问题【英文标题】:Issue obtaining minimum value of list/array 【发布时间】:2014-09-03 07:18:06 【问题描述】:

我遇到了一个奇怪的问题,至少我无法解释这种行为的原因。

我使用下面定义的函数rand_data 生成一个随机值列表。当我尝试使用min() 函数提取最小值时,它返回整个列表,这让我相信它不是一个列表,而是一个数组

但如果我尝试使用 .min() 属性,它会返回错误:

AttributeError: 'list' object has no attribute 'min'

这里发生了什么? x1 是列表还是数组?

最小的工作示例:

import numpy as np

def rand_data():
    return np.random.uniform(low=10., high=20., size=(10,))

# Generate data.
x1 = [rand_data() for i in range(1)]

print min(x1)
print x1.min()

【问题讨论】:

一个数组是python中的一个列表 你有一个 list 对象,其中包含 1 个rand_data() 调用的结果。 您正在生成一个包含一个元素的列表,并且该元素是一个数组 @GoBrewers14 哦,这是一个简单的解释。您介意将其发布为答案吗? 没关系,我看到@MartijnPieters 刚刚发布了那个确切的答案。 【参考方案1】:

您使用了列表推导:

x1 = [rand_data() for i in range(1)]

您现在有一个 Python 列表对象,其中包含来自rand_data()一个结果。

由于rand_data() 使用numpy.random.uniform(),这意味着您有一个列表包含一个numpy数组。

这里不要使用列表推导式,这显然不是你想要的:

x1 = rand_data()

【讨论】:

我现在明白了。我正在使用该方法生成几个随机数据列表,因此是[rand_data() for i in range(1)]。谢谢!【参考方案2】:
import numpy as np

def rand_data(num_elements):
# numpy returns always an array with a defined number
# of elements specified by the size parameter
     return np.random.uniform(low=10., high=20., size=num_elements)

#rand_data will automatically generate the random data for you
# simply specifying the number of elements to generate
x1 = rand_data(10)

print('Minimum value for 0 is 1'.format(x1, min(x1)))

【讨论】:

以上是关于获取列表/数组的最小值的问题的主要内容,如果未能解决你的问题,请参考以下文章

在Java中的整数数组列表中找到最小值的递归函数

从 JavaScript 数组中获取对象值的最大值和最小值

如何从给定数组的范围查询中获取给定值的最小异或值

计算数组中最大值和最小值的差值

确定数组中 N 个非零最小值的索引

如何获取列中多个最小值的索引?