亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python:同時對兩個多維數組進行矢量化函數

Python:同時對兩個多維數組進行矢量化函數

一只名叫tom的貓 2022-05-24 15:44:03
在 python 中,對單個數組f(x)上的標量函數進行矢量化很簡單:只需使用. 但是假設我有兩個(或原則上是多個)具有相同形狀的數組,并且我想對一個帶有標量的函數同時在兩者上進行矢量化。類似的東西,它將再次返回一個具有共同維度的對象。xa1f(a1)a1, a2Nx3g(x,y)x,yg(a1,a2)N編輯:如果a1,a2都是一維的,這變得微不足道。我們使用如下所述的簡單廣播。但是,對于多維數組,答案對我來說并不明顯。那么,我該怎么做,最好使用numpy?示例(已編輯):a1 = np.array of size 20x3 # so that each row is a 3-vectora2 = np.array of size 20x3 # dittodef f(x, y): # acts on each element    ... complicated function, using other global variables ...   return ... (scalar)如果沒有矢量化,我需要f單獨循環所有 20 行,并獲得輸出長度為 20 的矢量:result = []for i, elem in a1:    result.append(f(elem, a2[i]))result = np.array(result)但是,我想消除for循環,并使用 numpy 矢量化有一個語句。原因是能夠使用jax( https://github.com/google/jax ) 的 numpy 包裝器,然后在 GPU 上加速它。像天真的東西result = f(a1, a2) 不起作用。那么正確的語法是什么?
查看完整描述

3 回答

?
元芳怎么了

TA貢獻1798條經驗 獲得超7個贊

在過去的幾天里,我也一直在嘗試做類似的事情。我終于設法做到了np.vectorize,使用函數簽名。試試下面的代碼片段:


fn_vectorized = np.vectorize(interpolate.interp1d,

                                     signature='(n),(n)->()')

interp_fn_array = fn_vectorized(x[np.newaxis, :, :], y)

在這里,我正在對 interp1d 函數進行矢量化。x 和 y 是形狀 (mxn) 的數組。目標是為x 的第 i 行和y的第i行生成一個插值函數數組。數組“interp_fn_array”包含插值函數(形狀為(1 xm)。


查看完整回答
反對 回復 2022-05-24
?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

它可能取決于您需要執行的操作,如果它是一個簡單的總和,那么以下將起作用:


import numpy as np

a = np.arange(3*2*20).reshape((20,3,2))

b = np.arange(2*20).reshape((20,2))


res = (a.transpose((1,2,0))+b.transpose((1,0))).transpose((2,0,1))

print(a[0],b[0])


[[0 1]

 [2 3]

 [4 5]] [0 1]


print(res[0])


[[0 2]

 [2 4]

 [4 6]]

首先,輸入數據被轉置,以便在廣播操作中涉及正確的維度。求和后,輸出轉回。


查看完整回答
反對 回復 2022-05-24
?
GCT1015

TA貢獻1827條經驗 獲得超4個贊

使用 numpy 的vectorize。


np.vectorize使用簡單 lambda 函數的簡單示例:


import numpy as np

f = np.vectorize(lambda x: 2*x)

f([[2,3],[3,4],[1,1]])

# output:

array([[4, 6],

       [6, 8],

       [2, 2]])


查看完整回答
反對 回復 2022-05-24
  • 3 回答
  • 0 關注
  • 176 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號