最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用稀疏矩陣節(jié)省內(nèi)存實(shí)例

 更新時(shí)間:2014年06月27日 11:31:41   投稿:junjie  
這篇文章主要介紹了Python使用稀疏矩陣節(jié)省內(nèi)存實(shí)例,矩陣中非零元素的個(gè)數(shù)遠(yuǎn)遠(yuǎn)小于矩陣元素的總數(shù),并且非零元素的分布沒(méi)有規(guī)律,則稱該矩陣為稀疏矩陣,需要的朋友可以參考下

推薦系統(tǒng)中經(jīng)常需要處理類似user_id, item_id, rating這樣的數(shù)據(jù),其實(shí)就是數(shù)學(xué)里面的稀疏矩陣,scipy中提供了sparse模塊來(lái)解決這個(gè)問(wèn)題,但scipy.sparse有很多問(wèn)題不太合用:

1、不能很好的同時(shí)支持data[i, ...]、data[..., j]、data[i, j]快速切片;
2、由于數(shù)據(jù)保存在內(nèi)存中,不能很好的支持海量數(shù)據(jù)處理。

要支持data[i, ...]、data[..., j]的快速切片,需要i或者j的數(shù)據(jù)集中存儲(chǔ);同時(shí),為了保存海量的數(shù)據(jù),也需要把數(shù)據(jù)的一部分放在硬盤上,用內(nèi)存做buffer。這里的解決方案比較簡(jiǎn)單,用一個(gè)類Dict的東西來(lái)存儲(chǔ)數(shù)據(jù),對(duì)于某個(gè)i(比如9527),它的數(shù)據(jù)保存在dict['i9527']里面,同樣的,對(duì)于某個(gè)j(比如3306),它的全部數(shù)據(jù)保存在dict['j3306']里面,需要取出data[9527, ...]的時(shí)候,只要取出dict['i9527']即可,dict['i9527']原本是一個(gè)dict對(duì)象,儲(chǔ)存某個(gè)j對(duì)應(yīng)的值,為了節(jié)省內(nèi)存空間,我們把這個(gè)dict以二進(jìn)制字符串形式存儲(chǔ),直接上代碼:

復(fù)制代碼 代碼如下:

'''
Sparse Matrix
'''
import struct
import numpy as np
import bsddb
from cStringIO import StringIO
 
class DictMatrix():
    def __init__(self, container = {}, dft = 0.0):
        self._data  = container
        self._dft   = dft
        self._nums  = 0
 
    def __setitem__(self, index, value):
        try:
            i, j = index
        except:
            raise IndexError('invalid index')
 
        ik = ('i%d' % i)
        # 為了節(jié)省內(nèi)存,我們把j, value打包成字二進(jìn)制字符串
        ib = struct.pack('if', j, value)
        jk = ('j%d' % j)
        jb = struct.pack('if', i, value)
 
        try:
            self._data[ik] += ib
        except:
            self._data[ik] = ib
        try:
            self._data[jk] += jb
        except:
            self._data[jk] = jb
        self._nums += 1
 
    def __getitem__(self, index):
        try:
            i, j = index
        except:
            raise IndexError('invalid index')
 
        if (isinstance(i, int)):
            ik = ('i%d' % i)
            if not self._data.has_key(ik): return self._dft
            ret = dict(np.fromstring(self._data[ik], dtype = 'i4,f4'))
            if (isinstance(j, int)): return ret.get(j, self._dft)
 
        if (isinstance(j, int)):
            jk = ('j%d' % j)
            if not self._data.has_key(jk): return self._dft
            ret = dict(np.fromstring(self._data[jk], dtype = 'i4,f4'))
 
        return ret
 
    def __len__(self):
        return self._nums
 
    def __iter__(

測(cè)試代碼:

復(fù)制代碼 代碼如下:

import timeit
timeit.Timer('foo = __main__.data[9527, ...]', 'import __main__').timeit(number = 1000)

消耗1.4788秒,大概讀取一條數(shù)據(jù)1.5ms。
采用類Dict來(lái)存儲(chǔ)數(shù)據(jù)的另一個(gè)好處是你可以隨便用內(nèi)存Dict或者其他任何形式的DBM,甚至傳說(shuō)中的Tokyo Cabinet….

好了,碼完收工。

相關(guān)文章

  • Python畫柱狀統(tǒng)計(jì)圖操作示例【基于matplotlib庫(kù)】

    Python畫柱狀統(tǒng)計(jì)圖操作示例【基于matplotlib庫(kù)】

    這篇文章主要介紹了Python畫柱狀統(tǒng)計(jì)圖操作,結(jié)合實(shí)例形式分析了Python基于matplotlib庫(kù)實(shí)現(xiàn)圖形繪制的相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07
  • 在PyCharm中實(shí)現(xiàn)添加快捷模塊

    在PyCharm中實(shí)現(xiàn)添加快捷模塊

    今天小編就為大家分享一篇在PyCharm中實(shí)現(xiàn)添加快捷模塊,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • Python 利用scrapy爬蟲(chóng)通過(guò)短短50行代碼下載整站短視頻

    Python 利用scrapy爬蟲(chóng)通過(guò)短短50行代碼下載整站短視頻

    近日,有朋友向我求助一件小事兒,他在一個(gè)短視頻app上看到一個(gè)好玩兒的段子,想下載下來(lái),可死活找不到下載的方法。經(jīng)過(guò)我的一番研究才找到解決方法,下面小編給大家分享Python 利用scrapy爬蟲(chóng)通過(guò)短短50行代碼下載整站短視頻的方法,感興趣的朋友一起看看吧
    2018-10-10
  • 在pandas中遍歷DataFrame行的實(shí)現(xiàn)方法

    在pandas中遍歷DataFrame行的實(shí)現(xiàn)方法

    這篇文章主要介紹了在pandas中遍歷DataFrame行的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • python用pyinstaller封裝exe雙擊后瘋狂閃退解決辦法

    python用pyinstaller封裝exe雙擊后瘋狂閃退解決辦法

    本文主要介紹了python用pyinstaller封裝exe雙擊后瘋狂閃退解決辦法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • python argparse 模塊命令行參數(shù)用法及說(shuō)明

    python argparse 模塊命令行參數(shù)用法及說(shuō)明

    這篇文章主要介紹了python argparse 模塊命令行參數(shù)用法及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • python中使用psutil查看內(nèi)存占用的情況

    python中使用psutil查看內(nèi)存占用的情況

    今天小編就為大家分享一篇python中使用psutil查看內(nèi)存占用的情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • pytorch如何獲得模型的計(jì)算量和參數(shù)量

    pytorch如何獲得模型的計(jì)算量和參數(shù)量

    這篇文章主要介紹了pytorch如何獲得模型的計(jì)算量和參數(shù)量操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Django 實(shí)現(xiàn)jwt認(rèn)證的示例

    Django 實(shí)現(xiàn)jwt認(rèn)證的示例

    這篇文章主要介紹了Django 實(shí)現(xiàn)jwt 認(rèn)證的示例,幫助大家更好的理解和學(xué)習(xí)使用django,感興趣的朋友可以了解下
    2021-04-04
  • Python使用Pygame繪制時(shí)鐘

    Python使用Pygame繪制時(shí)鐘

    這篇文章主要為大家詳細(xì)介紹了Python使用Pygame繪制時(shí)鐘,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11

最新評(píng)論

麦盖提县| 天祝| 五家渠市| 二手房| 罗定市| 台前县| 文登市| 博爱县| 九龙县| 稻城县| 荣昌县| 德昌县| 双鸭山市| 项城市| 宝应县| 青阳县| 阜阳市| 伊宁市| 上饶县| 浮山县| 北流市| 河间市| 四会市| 灵寿县| 渝北区| 洮南市| 锦屏县| 南安市| 崇信县| 桦南县| 蓝山县| 营山县| 大同市| 九龙坡区| 桃园市| 南漳县| 贡嘎县| 金寨县| 永兴县| 扶绥县| 泸西县|