为了账号安全,请及时绑定邮箱和手机立即绑定

如何将阵列切成最小值

如何将阵列切成最小值

慕尼黑5688855 2022-08-25 13:46:26
我正在尝试定义一个函数,该函数查找数组的最小值并将其切成该值(正负5个位置)。我的数组看起来像这样:[[ 0.          9.57705087] [ 0.0433      9.58249315] [ 0.0866      9.59745942] [ 0.1299      9.62194967] [ 0.1732      9.65324278] [ 0.2165      9.68725702] [ 0.2598      9.72263184] [ 0.3031      9.75256437] [ 0.3464      9.77025178] [ 0.3897      9.76889121] [ 0.433       9.74167982] [ 0.4763      9.68589645] [ 0.5196      9.59881999] [ 0.5629      9.48861383] [ 0.6062      9.3593597 ]]但是,我正在处理更大的集合,并且需要一个可以自动完成该函数的函数,而无需手动查找最小值,然后围绕该集合对数组进行切片。我想找到数组[:,1]值的最小值,然后将切片应用于整个数组。
查看完整描述

2 回答

?
largeQ

TA贡献2039条经验 获得超8个赞

用于获取最小值的索引。这将仅使用第二列来执行此操作(您尚未指定它是否是跨列的最小值)。np.argmin()

your_array[:np.argmin(your_array[:, 1]), :]

要将其切成比最小值更远的 5 个值,请使用:

your_array[:np.argmin(your_array[:, 1]) + 5, :]


查看完整回答
反对 回复 2022-08-25
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

给定您的目标数组:


import numpy as np


anarray = np.array([[ 0., 9.57705087],

                    [ 0.0433, 9.58249315],

                    [ 0.0866, 9.59745942],

                    [ 0.1299, 9.62194967],

                    [ 0.1732, 9.65324278],

                    [ 0.2165, 9.68725702],

                    [ 0.2598, 9.72263184],

                    [ 0.3031, 9.75256437],

                    [ 0.3464, 9.77025178],

                    [ 0.3897, 9.76889121],

                    [ 0.433, 9.74167982],

                    [ 0.4763, 9.68589645],

                    [ 0.5196, 9.59881999],

                    [ 0.5629, 0.48861383],

                    [ 0.6062, 9.3593597]])

此函数将完成以下工作:


def slice_by_five(array):

    argmin = np.argmin(array[:,1])

    if argmin < 5:

        return array[:argmin+6,:]

    return array[argmin-5:argmin+6,:]


check = slice_by_five(anarray)

print(check)

输出:


[[0.3897     9.76889121]

 [0.433      9.74167982]

 [0.4763     9.68589645]

 [0.5196     9.59881999]

 [0.5629     9.48861383]

 [0.6062     9.3593597 ]]

该函数当然可以推广以考虑任何大小的邻域:n


def slice_by_n(array, n):

    argmin = np.argmin(array[:,1])

    if argmin < n:

        return array[:argmin+n+1,:]

    return array[argmin-n:argmin+n+1,:]


check = slice_by_n(anarray, 2)

print(check)

输出:


[[0.5196     9.59881999]

 [0.5629     9.48861383]

 [0.6062     9.3593597 ]]


查看完整回答
反对 回复 2022-08-25
  • 2 回答
  • 0 关注
  • 131 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号