[英]using arrays of different sizes within a function
我正在嘗試編寫一個 function,它將從二維數組的行中獲取一組 arguments,並將它們與更長的一維數組的所有元素結合使用:
x = np.linspace(-10,10,100)
abc = np.array([[1,2,1],
[1,3,5],
[12.5,-6.4,-1.25],
[4,2,1]])
def quadratic(a, b, c, x):
return a*(x ** 2) + b*x + c
y = quadratic(abc[:,0], abc[:,1], abc[:,2], x)
但這返回:
operands could not be broadcast together with shapes (4,) (100,)
當我手動輸入 a、b 和 c 值時,我得到一個 100 元素的一維數組,因此我希望它返回一個 (4,100) 數組。 是什么賦予了?
在 numpy 中,操作x * y
是按元素執行的,其中可以擴展一個或兩個值以使它們兼容。 這稱為廣播。 在上面的示例中,您的 arrays 具有不同的維度 (100,0) 和 (4,3),因此會出現錯誤。
乘以矩陣時,您應該改用點。
import numpy as np
x = np.linspace(-10,10,100)
abc = np.array([[1,2,1],
[1,3,5],
[12.5,-6.4,-1.25],
[4,2,1]])
np.dot(x, abc[:,0])
abc[:, i]
的形狀為 (4)。 您需要它的形狀為 (4, 1) 以針對形狀為 (100) 的x
進行廣播以產生您想要的 (4, 100) 輸出---因此您需要執行abc[:, i, None]
來添加那個額外的維度。
以下應該工作:
y = quadratic(abc[:, 0, None], abc[:, 1, None], abc[:, 2, None], x)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.