问题描述
我正在尝试将自定义函数映射到numpy数组的每个元素。有问题的功能:
"5f10482574d83d4b726fe5"
此函数本质上是excel match的一个版本,但它用于从上方或下方为给定输入查找范围内的最接近值。在将lookup_array传递给此函数之前,将对其进行相应的排序。
当我尝试在数组上映射此函数时,出现错误。例如:
def find_closest(value,lookup_array,breed=True):
if breed == True:
return lookup_array[sum(lookup_array <= value) - 1]
else:
return lookup_array[sum(lookup_array >= value) - 1]
我收到一个错误“尺寸为0的轴-1不存在”。感谢您的帮助。
谢谢!
解决方法
您忘记告诉程序不允许在查找数组上进行向量化。您可以使用排除的参数轻松解决该问题。这段代码对我来说很好用(请注意,现在必须命名参数):
import numpy as np
def find_closest(value,lookup_array,breed=True):
if breed == True:
return lookup_array[sum(lookup_array <= value) - 1]
else:
return lookup_array[sum(lookup_array >= value) - 1]
lut = np.array(np.arange(-20,20.25,0.25))
sample1 = np.random.normal(size=(10,10))
func = np.vectorize(find_closest,excluded=['lookup_array'])
print(func(value=sample1,lookup_array=lut))