常量lambda表达式,返回数据的形状

时间:2014-06-16 22:14:26

标签: python arrays lambda

给我的lambda表达式列表(Sympy's lambdify),一些明确取决于变量x,一些常量。我想用Numpy数组来评估那些。

在使用Numpy数组lambda x: 1.0 + x**2计算lambda表达式(例如x)时,结果将与数组具有相同的形状。如果表达式恰好未明确包含x,例如g = lambda x: 1.0,则仅返回标量。

import numpy

f = [lambda x: 1.0 + x**2, lambda x: 1.0]

X = numpy.array([1, 2, 3])

print(f[0](X))
print(f[1](X))

返回

[  2.   5.  10.]
1.0

有没有办法让输出参数的形状保持一致?

4 个答案:

答案 0 :(得分:3)

您可以使用ones_like

>>> X = numpy.array([1, 2, 3])
>>> def g(x): return numpy.ones_like(x)
>>> g(X)
array([1, 1, 1])

请注意,这会返回整数,而不是浮点数,因为那是输入dtype;您可以指定dtype=float或乘以1.0,如果您希望始终获得浮点数。

PS:使用lambda然后立即给它命名有点奇怪。这就像戴着面具但发放名片一样。

PPS:在ones_like之前回来我想要一些适当的形状时,我倾向于使用x*0+1

答案 1 :(得分:0)

你似乎想要一组数组:

>>> import numpy
>>> numpy.ones(3)
array([ 1.,  1.,  1.])

如果你想设置标量,很容易这样做

g = lambda x: numpy.ones(shape=x.shape) * 2

g(X)

返回

array([ 2.,  2.,  2.])

对于任意数组:

g = lambda x: numpy.ones(shape=x.shape) * 1

n = numpy.array([1,2,3,4,5])

g(n)是

array([ 1.,  1.,  1.,  1.,  1.])

答案 2 :(得分:0)

我没有看到问题,只是这样做:

import numpy as np

X = np.array([1, 2, 3])

f = lambda x: 1.0 + x**2
print(f(X))

g = lambda x: np.ones(shape=(len(X),))
print(g(X))

打印哪些:

[  2.   5.  10.]
[ 1.  1.  1.]

请注意,使用np.ones(shape=(len(X),))与使用np.ones_like(X)

相同

答案 3 :(得分:0)

使用ones_like

g = lambda x: np.ones_like(x) * 1.0

还有一个稍微粗俗的解决方案:

g = lambda x: 1.0 + (x*0)