第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

使用numpy構(gòu)建兩個(gè)數(shù)組的所有組合的數(shù)組

使用numpy構(gòu)建兩個(gè)數(shù)組的所有組合的數(shù)組

人到中年有點(diǎn)甜 2019-06-19 19:23:10
使用numpy構(gòu)建兩個(gè)數(shù)組的所有組合的數(shù)組我試圖通過(guò)6參數(shù)函數(shù)的參數(shù)空間來(lái)研究它的數(shù)值行為,然后再嘗試做任何復(fù)雜的事情,所以我正在尋找一種有效的方法來(lái)做到這一點(diǎn)。我的函數(shù)以浮點(diǎn)值作為輸入,給定一個(gè)6昏暗的numpy數(shù)組。我最初想做的是:首先,我創(chuàng)建了一個(gè)函數(shù),該函數(shù)接受兩個(gè)數(shù)組,并從兩個(gè)數(shù)組生成一個(gè)包含所有值組合的數(shù)組。from numpy import *def comb(a,b):     c = []     for i in a:         for j in b:             c.append(r_[i,j])     return c然后我用reduce()若要將其應(yīng)用于同一個(gè)數(shù)組的m個(gè)副本,請(qǐng)執(zhí)行以下操作:def combs(a,m):     return reduce(comb,[a]*m)然后我像這樣評(píng)估我的功能:values = combs(np.arange(0,1,0.1),6)for val in values:     print F(val)這個(gè)很管用,但太慢了。我知道參數(shù)的空間很大,但這不應(yīng)該太慢。我只取樣了10個(gè)6(100萬(wàn)個(gè))在這個(gè)例子中,創(chuàng)建數(shù)組花費(fèi)了超過(guò)15秒的時(shí)間。values.你知道用Numpy做這件事的更有效的方法嗎?我可以修改函數(shù)的方式F如果有必要的話這就是爭(zhēng)論。
查看完整描述

3 回答

?
烙印99

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊

在更新版本中numpy(>1.8.x),numpy.meshgrid()提供一個(gè)更快的實(shí)現(xiàn):

@PV溶液

In [113]:%timeit cartesian(([1, 2, 3], [4, 5], [6, 7]))10000 loops, best of 3: 135 μs per loopIn [114]:
cartesian(([1, 2, 3], [4, 5], [6, 7]))Out[114]:array([[1, 4, 6],
       [1, 4, 7],
       [1, 5, 6],
       [1, 5, 7],
       [2, 4, 6],
       [2, 4, 7],
       [2, 5, 6],
       [2, 5, 7],
       [3, 4, 6],
       [3, 4, 7],
       [3, 5, 6],
       [3, 5, 7]])

numpy.meshgrid()過(guò)去是2D的,現(xiàn)在它可以實(shí)現(xiàn)ND了。在這種情況下,3D:

In [115]:%timeit np.array(np.meshgrid([1, 2, 3], [4, 5], [6, 7])).T.reshape(-1,3)10000 loops, best of 3: 74.1 μs per loopIn [116]:
np.array(np.meshgrid([1, 2, 3], [4, 5], [6, 7])).T.reshape(-1,3)Out[116]:array([[1, 4, 6],
       [1, 5, 6],
       [2, 4, 6],
       [2, 5, 6],
       [3, 4, 6],
       [3, 5, 6],
       [1, 4, 7],
       [1, 5, 7],
       [2, 4, 7],
       [2, 5, 7],
       [3, 4, 7],
       [3, 5, 7]])

注意,最終結(jié)果的順序略有不同。


查看完整回答
反對(duì) 回復(fù) 2019-06-19
?
四季花海

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超5個(gè)贊

迭代工具.組合通常是從Python容器中獲取組合的最快方法(如果您確實(shí)想要組合,即沒(méi)有重復(fù)的排列,并且不依賴于順序;這不是您的代碼看起來(lái)要做的事情,但我不知道這是因?yàn)槟拇a是錯(cuò)誤的還是因?yàn)槟褂昧隋e(cuò)誤的術(shù)語(yǔ))。

如果您想要與組合不同的東西-也許是迭代工具中的其他迭代器,productpermutations也許能更好地為你服務(wù)。例如,您的代碼看起來(lái)與以下代碼大致相同:

for val in itertools.product(np.arange(0, 1, 0.1), repeat=6):
    print F(val)

所有這些迭代器都會(huì)生成元組,而不是列表或numpy數(shù)組,因此,如果您的F對(duì)獲取特定的numpy數(shù)組很挑剔,那么您將不得不接受在每一步中構(gòu)造、清除和重新填充一個(gè)數(shù)組的額外開(kāi)銷。


查看完整回答
反對(duì) 回復(fù) 2019-06-19
  • 3 回答
  • 0 關(guān)注
  • 2152 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)