如何在NumPy中获得恒定的函数以保持形状

时间:2016-08-05 17:14:26

标签: python numpy numpy-broadcasting

我有一个data = { 'a' :[1,'',2]} print (map( lambda x: str(x) if x else 'n/a', data['a'])) ['1', 'n/a', '2'] 数组NumPy,其形状为A,并希望通过某个函数(m,n)运行所有元素。对于非常数函数,例如ff(x) = x,广播完全正常并返回预期结果。对于f(x) = x**2,将函数应用于我的数组f(x) = 1但是只返回标量 1.

有没有办法强制广播保持形状,即在这种情况下返回1的数组?

3 个答案:

答案 0 :(得分:1)

F(x) = 1不是使用deflambda创建函数并返回1所需的函数。然后使用np.vectorize将函数应用于数组。< / p>

>>> import numpy as np
>>> f = lambda x: 1
>>> 
>>> f = np.vectorize(f)
>>> 
>>> f(np.arange(10).reshape(2, 5))
array([[1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1]])

答案 1 :(得分:0)

使用x.fill(1)。确保在fill未返回新变量时正确返回,它会修改x

答案 2 :(得分:0)

在一般情况下,这听起来像是np.ones_likenp.full_like的工作:

def f(x):
    result = np.full_like(x, 1)  # or np.full_like(x, 1, dtype=int) if you don't want to
                                 # inherit the dtype of x
    if result.shape == 0:
        # Return a scalar instead of a 0D array.
        return result[()]
    else:
        return result