我有一个形状NumPy
数组,想通过某个函数运行所有元素。对于非常量函数,例如广播或广播工作得非常好,并返回预期的结果。对于,将函数应用于我的数组但是只返回标量1。A
(m,n)
f
f(x) = x
f(x) = x**2
f(x) = 1
A
有没有办法强制广播保持形状,即在这种情况下返回一个 1 的数组?
我有一个形状NumPy
数组,想通过某个函数运行所有元素。对于非常量函数,例如广播或广播工作得非常好,并返回预期的结果。对于,将函数应用于我的数组但是只返回标量1。A
(m,n)
f
f(x) = x
f(x) = x**2
f(x) = 1
A
有没有办法强制广播保持形状,即在这种情况下返回一个 1 的数组?
F(x) = 1
不是一个函数,您需要使用def
or创建一个函数lambda
并返回 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]])
这听起来像是一份工作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
使用x.fill(1)
. 确保正确返回它,因为fill
它不会返回新变量,它会修改x