首页 > 解决方案 > 在二维坐标数组上调用函数的最有效方法是什么?

问题描述

我有一个大小为(M,N,3)的ndarray。它拥有 M x N 个点,每个点都由其 x、y 和 z 坐标标识。我也有一个函数'foo'。'foo' 将一个点作为一个大小为 (, 3) 的 ndarray。有没有比使用两个嵌套 for 循环更快的方法在我的数组中的每个 M x N 点上调用“foo”?

到目前为止,这是我尝试过的。我的数组是变量'sample_array'。

num_rows = sample_array.shape[0]
num_columns = sample_array.shape[1]
solution = np.zeros((num_rows, num_columns))

for row in range(num_rows):
   for column in range(num_columns):
      point = sample_array[row, column]
      solution[row, column] = foo(point)

我找到了这个答案,它描述了使用这两种解决方案:

np.vectorize(foo)
np.array(map(foo, sample_array))

但是,我不确定如何指定我不希望函数映射到 M x N x 3 浮点数中的每一个。相反,我希望它映射要在每个 M x N (, 3) ndarray 上调用的函数。

谢谢!

标签: pythonnumpy

解决方案


您可以尝试np.apply_along_axis(function, axis=2, arr=your_input_array)沿第 3 轴对数组进行切片并将函数应用于每个切片,即点。

在这里找到文档np.apply_along_axis


推荐阅读