【问题标题】:How to optimize and vectorize my function?如何优化和矢量化我的功能?
【发布时间】:2023-03-27 08:14:01
【问题描述】:

我应该如何优化此功能以提高速度?我知道我可能应该在循环之前声明 arr,这样 Python 就不需要在每个循环中检查 if/else 条件。

但我还能做什么?我知道可能有一种方法可以使用地图或矢量化操作。

def get_features(images):
    arr = None
    for i in range(len(images)):
        img = X_train[i]
        a, b, c, d = get_rgb_mean(img), get_rgb_std(img), get_hist(img), get_lbp(img)
        j = np.concatenate((a, b, c, d))
        if arr is None:
            arr = j
        else:
            arr = np.concatenate((arr, j), axis=1)
    arr = StandardScaler().fit_transform(arr)
    return arr.T

【问题讨论】:

  • 我投票结束这个问题,因为这是一个更适合代码审查的问题codereview.stackexchange.com
  • 你是对的!不知道有这种东西存在
  • 即使在那里,你也应该清楚地描述输入是什么以及函数应该做什么。
  • 会的!我应该删除这个问题吗?
  • 在整体计时中,if 测试是次要的时间消耗。循环中的np.concatenate 是个坏主意。我不得不反复告诉人们,使用列表追加代替。

标签: python numpy vectorization


【解决方案1】:

小优化:

def get_features(images):
    for img in x_train:
        a, b, c, d = (get_rgb_mean(img),
                      get_rgb_std(img),
                      get_hist(img),
                      get_lbp(img))
        j = np.concatenate((a, b, c, d,))
        if arr:
            arr = np.concatenate((arr, j), axis=1)
            continue
        arr = j
    arr = standardscaler().fit_transform(arr)
    return arr.t

请注意,这仅在 x_train 具有图像长度时才有效

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-11
    相关资源
    最近更新 更多