如何将索引相关函数应用于 numpy ndarray?
How to apply an index-dependent function to a numpy ndarray?
因此 numpy ndarrays 非常方便,因为您只需为任何一维函数 f 和任何 ndarray A 输入 f(A) ,它就会按元素应用 f。有人告诉我,这也是一种将函数应用于 ndarray 并避免 for 循环的非常有效的方法。避免循环,这是我被告知的。
事实证明,现在我需要应用一个函数 f(A),它不仅是一维的,而且需要了解每个元素的索引元组,以便 return 每个元素的正确值.在这些情况下,有没有办法避免使用 for 循环或显式递归并继续使用 ndarrays 上的直接函数应用程序?还是我别无选择?
使用numpy.meshgrid
生成数组中每个元素的索引元组对应的坐标矩阵。然后让你的函数也依赖于这些坐标。
例如a
是一个三维数组。
x, y, z = np.meshgrid(np.arange(a.shape[0]), np.arange(a.shape[1]), np.arange(a.shape[2]), indexing='ij')
给出三个数组 x, y, z
,其中包含每个位置的 x、y 和 z 坐标。然后数组 a 上的函数将通过还给出索引数组来扩展。
f(a, x, y, z)
注意 indices/directions 的顺序。检查indexing
的选项。
因此 numpy ndarrays 非常方便,因为您只需为任何一维函数 f 和任何 ndarray A 输入 f(A) ,它就会按元素应用 f。有人告诉我,这也是一种将函数应用于 ndarray 并避免 for 循环的非常有效的方法。避免循环,这是我被告知的。
事实证明,现在我需要应用一个函数 f(A),它不仅是一维的,而且需要了解每个元素的索引元组,以便 return 每个元素的正确值.在这些情况下,有没有办法避免使用 for 循环或显式递归并继续使用 ndarrays 上的直接函数应用程序?还是我别无选择?
使用numpy.meshgrid
生成数组中每个元素的索引元组对应的坐标矩阵。然后让你的函数也依赖于这些坐标。
例如a
是一个三维数组。
x, y, z = np.meshgrid(np.arange(a.shape[0]), np.arange(a.shape[1]), np.arange(a.shape[2]), indexing='ij')
给出三个数组 x, y, z
,其中包含每个位置的 x、y 和 z 坐标。然后数组 a 上的函数将通过还给出索引数组来扩展。
f(a, x, y, z)
注意 indices/directions 的顺序。检查indexing
的选项。