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设置变量的正确方法是什么?任何朋友都可以帮助您吗?
解决方案
我不明白您为什么要尝试使用frompyfunc
。用于将数组参数传递给仅接受标量输入的函数。
In [97]: pval=np.array([[0., 0.,0., 0., 0.,0., 0., 0.],
...: [0., 0., 0., 0., 0.,0., 0., 0.]])
在第一种情况下,您使用全局pval
,并且只使用1age
值。无需frompyfunc
:
In [98]: pval[0]+1
Out[98]: array([1., 1., 1., 1., 1., 1., 1., 1.])
如果要将pval
作为参数传递,只需执行以下操作:
In [99]: def foo(mt,age):
...: return mt[0]+age
...:
In [100]: foo(pval,1)
Out[100]: array([1., 1., 1., 1., 1., 1., 1., 1.])
您提供了指向我之前回答的问题的链接。这种情况的症结在于,您的函数返回了一个大小可能不同的数组。我展示了如何通过列表理解来使用它。我还展示了如何调整vectorize
,以便它可以愉快地返回object
dtype结果。或者使用frompyfunc
返回该对象。在所有这些情况下,函数参数都是标量,即单个数字。
如果您的目标是向pval
的每一行添加不同的age
,则只需执行以下操作:
In [102]: pval + np.array([[1],[2]])
Out[102]:
array([[1., 1., 1., 1., 1., 1., 1., 1.],
[2., 2., 2., 2., 2., 2., 2., 2.]])
相关文章