【发布时间】:2021-11-27 19:40:03
【问题描述】:
我有一个 numpy 数组:
import numpy as np
pval=np.array([[0., 0.,0., 0., 0.,0., 0., 0.],
[0., 0., 0., 0., 0.,0., 0., 0.]])
还有一个矢量化函数:
def getnpx(age):
return pval[0]+age
vgetnpx = np.frompyfunc(getnpx, 1, 1)
vgetnpx(1)
输出:
array([1., 1., 1., 1., 1., 1., 1., 1.])
但是,如果我想为 pval 设置一个变量:
def getnpx(mt,age):
return mt[0]+age
vgetnpx = np.frompyfunc(getnpx, 2, 1)
vgetnpx(pval,1)
我收到一个错误:
TypeError: 'float' object is not subscriptable
为 pval 设置变量的正确方法是什么?有朋友可以帮忙吗?
【问题讨论】:
-
您应该检查函数中使用的
mt的值。当您向 ufunc 传递一个数组时,它将为数组中的每个值调用评估函数。对于您正在做的事情,尚不清楚您为什么使用frompyfunc而不仅仅是制作常规函数(即调用getnpx(pval,1)) -
谢谢你的回复,因为我的逻辑很复杂,比如np.cumprod我已经工作了1个月我必须使用frompyfunc
-
如果您必须使用
frompyfunc,那么您应该了解ufuncs,因为它会返回。第一句话告诉您它们“以逐个元素的方式运行”,这意味着它们不适用于您尝试做的事情,除非您可以传递将按您想要的方式广播的内容(比如:vgetnpx(pval,[[1], [0]])) 其中主函数的返回值就是mt+age。 -
您希望
frompyfunc对pval数组做什么? -
非常感谢您提出@hpaulj 请检查此问题,您将知道stackoverflow.com/questions/68955129/…
标签: python numpy vectorization numpy-ndarray array-broadcasting