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

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

np.newaxis() 的替代方法,用于在比較數(shù)組時(shí)節(jié)省內(nèi)存

np.newaxis() 的替代方法,用于在比較數(shù)組時(shí)節(jié)省內(nèi)存

蕪湖不蕪 2022-07-05 17:02:02
我想將一個(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


查看完整回答
反對(duì) 回復(fù) 2022-07-05
  • 1 回答
  • 0 關(guān)注
  • 198 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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