我有一个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)
运行所有元素。对于非常数函数,例如f
或f(x) = x
,广播完全正常并返回预期结果。对于f(x) = x**2
,将函数应用于我的数组f(x) = 1
但是只返回标量 1.
有没有办法强制广播保持形状,即在这种情况下返回1的数组?
答案 0 :(得分:1)
F(x) = 1
不是使用def
或lambda
创建函数并返回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_like
或np.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