2016-08-05 40 views
0

我有一個NumPy陣列A與形狀(m,n),並希望通過運行一些功能f所有元素。對於非恆定功能,例如f(x) = xf(x) = x**2廣播完美無缺,並返回預期結果。對於f(x) = 1,應用功能,以我的數組A不過才返回 1.如何獲得持續的功能,以保持形狀與NumPy

有沒有辦法迫使廣播,以保持形狀,即在這種情況下返回1秒的陣列?

回答

1

F(x) = 1是不是你需要創建一個函數deflambda並返回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]]) 
+0

我們並不真正需要對於一個像這樣簡單的情況來說,可以將'np.vectorize'的性能命中。 – user2357112

+0

@ user2357112這是一種情況,因爲OP提到的功能可能有不同的結構。 – Kasramvd

0

使用x.fill(1)。確保正確回擊fill不返回一個新的變量,它會修改x

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