我想將一個(gè)數(shù)組中的每個(gè)向量與另一個(gè)數(shù)組中的所有向量進(jìn)行比較,并計(jì)算每個(gè)向量有多少符號(hào)匹配。讓我舉個(gè)例子。我有兩個(gè)數(shù)組,a和b。對(duì)于a 中的每個(gè)向量,我想將它與b中的每個(gè)向量進(jìn)行比較。然后,我想返回一個(gè)新數(shù)組,該數(shù)組的維度是每個(gè)向量保存a中的向量與來自bnp.array((len(a),14))的向量匹配的次數(shù)0,1,2,3,4,..,12,13 。期望的結(jié)果顯示在下面的數(shù)組c中。我已經(jīng)使用解決了這個(gè)問題,但我的問題是(請(qǐng)參閱下面的函數(shù)),這占用了太多內(nèi)存,因此當(dāng)a和b變大np.newaxis()時(shí)我的計(jì)算機(jī)無法處理它。因此,我正在尋找一種更有效的方法來進(jìn)行此計(jì)算,因?yàn)閷⒕S度添加到向量中會(huì)大大損害我的記憶力。一種解決方案是使用正常的 for 循環(huán),但這種方法相當(dāng)慢。是否有可能使這些計(jì)算更有效?a = array([[1., 1., 1., 2., 1., 1., 2., 1., 0., 2., 2., 2., 2.], [0., 2., 2., 0., 1., 1., 0., 1., 1., 0., 2., 1., 2.], [0., 0., 0., 1., 1., 0., 2., 1., 2., 0., 1., 2., 2.], [1., 2., 2., 0., 1., 1., 0., 2., 0., 1., 1., 0., 2.], [1., 2., 0., 2., 2., 0., 2., 0., 0., 1., 2., 0., 0.]])b = array([[0., 2., 0., 0., 0., 0., 0., 1., 1., 1., 0., 2., 2.], [1., 0., 1., 2., 2., 0., 1., 1., 1., 1., 2., 1., 2.], [1., 2., 1., 2., 0., 0., 0., 1., 1., 2., 2., 0., 2.], [0., 1., 2., 0., 2., 1., 0., 1., 2., 0., 0., 0., 2.], [0., 2., 2., 1., 2., 1., 0., 1., 1., 1., 2., 2., 2.], [0., 2., 2., 1., 0., 1., 1., 0., 1., 0., 2., 2., 1.], [1., 0., 2., 2., 0., 1., 0., 1., 0., 1., 1., 2., 2.], [1., 1., 0., 2., 1., 1., 1., 1., 0., 2., 0., 2., 2.], [1., 2., 0., 0., 0., 1., 2., 1., 0., 1., 2., 0., 1.], [1., 2., 1., 2., 2., 1., 2., 0., 2., 0., 0., 1., 1.]])c = array([[0, 0, 0, 2, 1, 2, 2, 2, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 2, 3, 1, 2, 1, 1, 0, 0, 0, 0], [0, 0, 0, 3, 2, 4, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 3, 0, 3, 2, 1, 1, 0, 0, 0, 0, 0], [0, 0, 1, 1, 4, 0, 3, 0, 1, 0, 0, 0, 0, 0]])我的解決方案:def new_method_test(a,b): test = (a[:,np.newaxis] == b).sum(axis=2) zero = (test == 0).sum(axis=1) one = (test == 1).sum(axis=1) two = (test == 2).sum(axis=1) c = np.concatenate((zero,one,two,three,four,five,six,seven,eight,nine,ten,eleven,twelve,thirteen), axis = 0).reshape(14,len(a)).T return c謝謝你的幫助。
1 回答

長(zhǎng)風(fēng)秋雁
TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個(gè)贊
歡迎來到 Stackoverflow!如果你想節(jié)省內(nèi)存,我認(rèn)為 for 循環(huán)是要走的路(而且它真的沒那么慢)。此外,您可以使用np.bincount直接從一項(xiàng)測(cè)試轉(zhuǎn)到您的 c 輸出矩陣。我認(rèn)為這種方法將與您的方法大致相同,并且相比之下它將使用更少的內(nèi)存。
import numpy as npc = np.empty(a.shape, dtype=int)for i in range(a.shape[0]): test_one_vector = (a[i,:]==b).sum(axis=1) c[i,:] = np.bincount(test_one_vector, minlength=a.shape[1])
如果你真的在處理 a 和 b 中的浮點(diǎn)數(shù),你應(yīng)該考慮放棄相等檢查 (==) 以支持鄰近檢查,例如np.isclose
添加回答
舉報(bào)
0/150
提交
取消