簡體   English   中英

在 function 中使用不同大小的 arrays

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM