【发布时间】:2019-05-04 19:22:10
【问题描述】:
当函数包含条件时,我难以将函数应用于数组。我有一个低效的解决方法,正在寻找一种有效(快速)的方法。举个简单的例子:
pts = np.linspace(0,1,11)
def fun(x, y):
if x > y:
return 0
else:
return 1
现在,如果我运行:
result = fun(pts, pts)
然后我得到错误
ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()
在if x > y 行提出。我的低效解决方法是:
result = np.full([len(pts)]*2, np.nan)
for i in range(len(pts)):
for j in range(len(pts)):
result[i,j] = fun(pts[i], pts[j])
以更好(更重要的是,更快)的方式获得此信息的最佳方法是什么?
当函数包含条件时,我难以将函数应用于数组。我有一个低效的解决方法,正在寻找一种有效(快速)的方法。举个简单的例子:
pts = np.linspace(0,1,11)
def fun(x, y):
if x > y:
return 0
else:
return 1
现在,如果我运行:
result = fun(pts, pts)
然后我得到错误
ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()
在if x > y 行提出。我的低效解决方法是:
result = np.full([len(pts)]*2, np.nan)
for i in range(len(pts)):
for j in range(len(pts)):
result[i,j] = fun(pts[i], pts[j])
以更好(更重要的是,更快)的方式获得此信息的最佳方法是什么?
编辑:使用
def fun(x, y):
if x > y:
return 0
else:
return 1
x = np.array(range(10))
y = np.array(range(10))
xv,yv = np.meshgrid(x,y)
result = fun(xv, yv)
仍然引发相同的ValueError。
【问题讨论】:
-
查看
x>y的 while 数组。可以直接用吗? -
@hpaulj 我不确定我理解你的意思:“while 数组”是什么意思?
标签: python numpy lambda conditional vectorization