【问题标题】:Python: Returning values of matrix that are in a specific range, range is given as a tuple(from, to)Python:返回特定范围内的矩阵值,范围以元组形式给出(从,到)
【发布时间】:2022-01-01 09:52:57
【问题描述】:

学校问题:

定义一个 2 参数(输入)函数,该函数将返回给定范围内元素的平均值。范围以元组形式给出。

我必须编写 2 个函数:

1 正在使用循环;

2 正在使用操作。

def mygmean(array,tuple):   # Determines values inside and outside a specified range
    """
    Determines values inside and outside a specified range.
    """
    
    import numpy as np
    incluided = []
    excluded = []
    
    
    for k in range(0, array.shape[0]):
        for i in range(0, array.shape[1]):
            if array[k,i] < tuple[0] or array[k,i] > tuple[-1]:
                excluded.append(array[k,i])
                pass
            else:
                incluided.append(array[k,i])
    final_geomean = np.prod(incluided)**(1/len(incluided))
        
    print(array)
    print(incluided)
    print(excluded)
    print(final_geomean)
    return(final_geomean,excluded)

编辑: 通过写作解决了第 1 部分:

def mygmean(array,t):   # Determines values inside and outside a specified range
    """
    Determines values inside and outside a specified range.
    """
    
    import numpy as np
    incluided = []
    excluded = []
    
    for k in range(0, array.shape[0]):
        for i in range(0, array.shape[1]):
            if array[k,i] < t[0] or array[k,i] > t[-1]:
                excluded.append(array[k,i])
                pass
            else:
                incluided.append(array[k,i])
    final_geomean = np.prod(incluided)**(1/len(incluided))

    return(final_geomean,excluded)

控制台输入:

mygmean(np.array([[2,4],[-9,3],[6,-2],[8,1],[12,8]]),(0,10)))

期望的输出:

(3.684369762785971, array([-9, -2, 12]))

【问题讨论】:

  • arraylist(即1D)还是list 的列表(即2D)?
  • 不要调用你的参数tuple。这隐藏了同名的 Python 类型。也许target 会更好。
  • @not_speshal 不确定您的意思。数组给出为:np.array([[2,4],[-9,3],[6,-2],[8,1],[12,8]])
  • @TimRoberts 好电话

标签: python arrays tuples spyder


【解决方案1】:

矢量化(即非循环)版本将使用 nympy.wherenumpy.nanmean

import numpy as np
def mygmean(array, t):
    return np.nanmean(np.where((array>=t[0]) & (array<t[1]), array, np.nan))

# example
a = np.array([[1,2,3], [4,5,6]])
mygmean(a, (2,5))
# 3.0

注意。我假设这里包括下限和排除上限

【讨论】:

    猜你喜欢
    • 2019-06-07
    • 2020-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    • 1970-01-01
    • 2022-06-24
    相关资源
    最近更新 更多