【问题标题】:How to optimize 3d-array computation with numpy?如何使用 numpy 优化 3d 数组计算?
【发布时间】:2019-11-14 17:01:18
【问题描述】:

我对 3d 数组数据有回归问题。数组的大小是 (350, 350, 50) 我需要对每个像素做回归处理;例如,对每个 (1, 1, 50) 数组进行回归,然后重复 350 x 350 次。

我用 Numpy 编写了我的代码,它在每个过程中运行。

row, col, depth = image_sequence.shape 

for i in range(0, row):
    for j in range(0, col):
        Ytrain = image_sequence[i, j, :]
        new_stack[i,j,:] = regression_process(Ytrain)

“行”是 350
'col' 是 350

在我的推断中,每个序列的计算时间需要 5 秒。 这意味着由于它应该被计算为 350x350 序列,它会在大约 7 天后完成。

我想知道如何优化这个过程并提前完成它。

我认为这与一些并行处理有关,但我不习惯。

【问题讨论】:

  • 假设 regression_process 确实是一个 5s-per-call 的瓶颈,没有改善的希望,那么它就是并行处理。在这种情况下,stackoverflow.com/questions/4682429/parfor-for-python 是重复的,但可以说没有给出直接的答案。
  • 如果你的函数 regression_process 需要 5sec 并且你需要调用它 350x350 次,那么你需要优化这个特定的函数。

标签: python numpy optimization


【解决方案1】:

numpy 的方法是对回归过程进行编码,使其将 (n, 50) 的数组作为输入,其中 n 是任意数字。我举一个简单的例子,只计算平均值。

def regression_process(image): length = image.shape[1] new_stack = np.sum(image, axis=1) return new_stack / length

new_stack = regression_process(image_sequence.reshape(row*col, depth)) new_stack.reshape(row, col, depth)

【讨论】:

    猜你喜欢
    • 2021-03-03
    • 2021-01-09
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多