如何获得常量函数以在 NumPy 中保持形状
How to get constant function to keep shape in NumPy
我有一个 NumPy
数组 A
,形状为 (m,n)
,我想通过某个函数 f
运行 所有元素。对于非常量函数,例如 f(x) = x
或 f(x) = x**2
广播工作得很好并且 returns 是预期的结果。对于 f(x) = 1
,将函数应用到我的数组 A
然而只是 returns 标量 1.
有没有办法强制广播保持形状,即在这种情况下为 return 1 的数组?
F(x) = 1
不是函数 您需要使用 def
或 lambda
和 return 创建函数 1. 然后使用 np.vectorize
应用在你的数组上运行。
>>> 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]])
使用x.fill(1)
。确保 return 正确,因为 fill
不是 return 新变量,它会修改 x
这听起来像是 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
我有一个 NumPy
数组 A
,形状为 (m,n)
,我想通过某个函数 f
运行 所有元素。对于非常量函数,例如 f(x) = x
或 f(x) = x**2
广播工作得很好并且 returns 是预期的结果。对于 f(x) = 1
,将函数应用到我的数组 A
然而只是 returns 标量 1.
有没有办法强制广播保持形状,即在这种情况下为 return 1 的数组?
F(x) = 1
不是函数 您需要使用 def
或 lambda
和 return 创建函数 1. 然后使用 np.vectorize
应用在你的数组上运行。
>>> 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]])
使用x.fill(1)
。确保 return 正确,因为 fill
不是 return 新变量,它会修改 x
这听起来像是 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