Python练习使用abs和argmin生成一个数组

时间:2018-03-10 11:26:18

标签: python

  

在[0,1]中生成一个10 x 3的随机数组。

     

对于每一行,选择最接近0.5的数字。

     

使用absargmin查找每行最近的列

我不明白解决方案,你能帮帮我吗?

解决方案

x1 = np.random.random([10,3])
print(x1)

c05 = [a[np.abs(a-0.5).argmin()] for a in x1]
print(c05)

2 个答案:

答案 0 :(得分:0)

首先,我们使用创建一个10x3数组 x1 = np.random.random([10,3])

然后我们想逐个迭代行来选择数字壁橱为0.5。 我们只需要找到当前行中使用0.5的最小(绝对值)。为了找到最小的元素,我们可以使用argmin()函数,它返回indices of the minimum values along an axis

我们可以简单地写一下:

result = []
for row in x:
    distance = np.abs(row-0.5)
    smallest_index = distance.argmin()
    result.append(row[smallest_index])

list comprehension形式编写上述代码,我们得到您的解决方案。

答案 1 :(得分:0)

好的,这是解释:

#this just creates an array 10x3
x1 = np.random.random([10,3])

#prints the array
print(x1)

现在下一位是实际逻辑发生的地方。让我们分解一下:

首先我们测量行数据点和0.5之间的差异,这是我们想要找到最接近的值的点。然后我们采取绝对的价值,因为我们不关心差异是消极的还是积极的。

np.abs(a-0.5)

然后在对行进行这样的转换之后,我们找到该值最小的索引。

np.abs(a-0.5).argmin()

之后我们只提取该索引的值

a[np.abs(a-0.5).argmin()]

对每一行执行此操作会导致列表理解,如下所示:

[a[np.abs(a-0.5).argmin()] for a in x1]

然后我们打印结果。

希望这有帮助。