【Python 】性能优化系列:随机数

【Python 】性能优化系列:随机数,第1张

最近在做的项目重点部分与大量生成随机数有关,维度高达[1700000,10000],需要生成 10 x 30 次左右,这里遇到内存和速度的双重瓶颈,特地研究了一下如何优化随机数。

优化时间测试所需的分析工具在另一篇博客《性能优化系列一:分析工具》中提到。

原生的python中也有随机模块生成 random.randint 和 random.random 等,但是速度非常慢,numpy 速度可以大幅提升。一般都采用numpy生成随机数。

比较常用的就是以上几种。在需要生成大量随机数的情况下,或生成伪随机数的情况下,python 3.7 常用 RandomState 。

直接生成大规模非稀疏矩阵如下,经常遇到 MemoryError 的错误,大概是同时生成多个float64精度的大规模随机矩阵服务器内存不够,而random state 似乎也没提供调整类型的attr,

这时最好使用即使生成即使销毁,仅保留种子作为索引,同样,多个CPU之间共享大规模矩阵涉及到共享内存或数据传输同步较慢的问题,最好也共享seed而不是直接共享矩阵。

ps. 这里注意一般我们设置time.time()为种子时,对于并发性程序是无效的,不要在并发程序中同时定义,建议生成一个seed list 列表再从中取。

这里可以对大规模矩阵进行分片以进行后续的np 乘法,再切片赋值,以时间换内存。这种情况的麻烦在于如果设定随机数种子会导致每个分片的随机数相同。可以利用一个最初seed(爷爷种子)randint生成 一组切片组数的seed(父亲种子),再每次从中取不同的随机数。

在上述切片方法尝试之后,可以解决内存问题。但是时间非常慢,特别是采取s = 1时在standard normal 上调用170万次的时间长达3000s,line search一下搜索了大约100000为切片值仍然太慢。在文档中发现了 BitGenerator 和 Generator ,大约可以提速到原来的 1/3。

除了Numpy和基本模块之外,AES CTR 加密算法生成随机数也很快,但是并不能有比较方便的方式控制每次生成的一样。参见以下reference。

tensorflow 和 pytorch 也都有大规模生成随机tensor的方式。性能待考。

1. 超快生成随机数的方式CSDN博客

2. tensorflow 生成随机tensor

文∕洪文岚

64 岁的方太太因为健检 X 光肺部有异常影像,再接受进一步的胸部电脑断层检查后,医师怀疑是恶性肿瘤,建议进行切片检查,确认是良性或恶性之后,再讨论后续的治疗方针。但她心想,万一是恶性肿瘤,进行切片可能会破坏肿瘤,或是在切片过程中让肿瘤扩散,实在担心到不知如何是好。

其实在癌症诊治上,切片扮演了重要的角色,可以判定肿瘤究竟属于良性或是恶性,甚至能确认癌症的细胞型态、恶性度及基因是否有突变等。

从切片判断良性、恶性

义大癌治疗医院外科系副院长、胸腔外科主治医师郑裕仁指出,切片对于癌症诊治是个重要且必备的做法,未经过切片检查,医师不敢断言所看到的组织究竟属于良性还是恶性?又该如何进行最完善的处置?

科技发达、影像学进步,对医师的临床诊断具有高度的参考价值,有些从影像学检查中,即可看出是哪一类异常的反应,但有些则不然,一旦怀疑有恶性肿瘤的可能性,即需借由切片进行确诊。

郑裕仁举肺癌为例指出,若是病人高烧不退,且白血球指数偏高,在影像检查中看到整片的异常表现,与肿瘤影像表现有明显差异,即可研判是肺部感染。但若影像检查中发现,有一块异常圆形组织且内部化脓,病人又有发烧的情形,初步研判是脓疡,先投予抗生素治疗;若抗生素治疗仍无法缓解症状,就得怀疑并非单纯脓疡,而有肿瘤的可能性,这时必须接受切片检查。

良性、恶性肿瘤处置大不同

良性肿瘤与恶性肿瘤的处置方式大不相同,所以,透过切片来判断非常重要。若为良性肿瘤,未必需要接受手术切除,即使肿瘤过大,已影响正常组织,一般只需切除肿瘤,让其不影响周边组织即可。但恶性肿瘤要考虑的层面更多,除了病灶可否完全之外,还要评估是否有扩散之虞,并决定辅以化疗或放疗等方式。这些后续医疗计画的拟订,一定得以切片检查结果做为基础。

切片检查与恶性肿瘤的诊治有密切的关联性,除了确认肿瘤是否为恶性之外,也可判断细胞型态与基因突变等相关资讯。

以肺癌为例,可分为小细胞肺癌与非小细胞肺癌,非小细胞癌又有腺癌、鳞状上皮细胞癌等,不同细胞型态的肺癌,治疗方针不同。从切片检查中可以厘清相关资讯,让临床医师依据切片的结果,拟订后续的治疗方针。

切片检查让癌细胞扩散机率低

切片检查是癌症诊治的重要先决要素,但很多人却担心切片检查会破坏肿瘤组织,或是进出肿瘤组织的过程,让癌细胞扩散;在早年或许切片检查的确存有此风险,但随着科技进步,这个担忧可是多虑了。

早期是以手术方式进行切片,以取得检体,侵袭性比较高。现今则大部分经由内视镜检查切片,或使用超音波、电脑断层定位肿瘤位置后,以细针经皮肤进入肿瘤取得检体,再进行检验。

郑裕仁指出,早年从体外将细针刺入体内的切片技术较不成熟,抵达肿瘤位置进行切片之后,将组织抽出体外。由于带有肿瘤组织的细针在抽出体外时,会经过正常组织,因此,被怀疑这些肿瘤组织可能在此过程中,沾染到正常组织,这个疑虑一直受到病人的关切。

但其实早在 1942 年医学界即已发现,肿瘤可能沿着出针管道而散布的风险,且很多肿瘤都有类似报告,只是机率非常低。

新式工具杜绝癌细胞扩散风险

有鉴于风险的存在,切片器械的套组已经有所精进,改进后的切片器械是一个具有内外套的套组,外套包覆著带有吸针的内套进入体内,抵达肿瘤位置后,由内针进入肿瘤组织进行切片,之后缩回外套包覆住,再抽出体外,可让带有肿瘤组织的吸针完全与正常组织隔离,杜绝传统方式可能出现的风险。

借由改良式的套件组合,让正常组织不致于有接触到肿瘤组织之虞,而有些组织的切片则因方式不同,原本即不存有肿瘤扩散的疑虑。例如呼吸道或是肠胃道肿瘤,因位于表层,可直接以支气管镜或是胃内视镜进行切片,取得组织后,器械直接缩回内视镜中,并不会经过正常组织。

在临床医师取得检体后,交由病理科进行检验。收到检体后,经由一连串的程序处理组织后,最后经由显微镜检查做出诊断,再由临床医师根据病理科的报告,与病人共同讨论后,拟订最适切的治疗方针。

梅约研究:切片检查癌患预后较佳

切片方式与器械的改良,有效改善切片检查导致癌细胞扩散的风险。郑裕仁直言,恶性肿瘤的生长速度很快,病人要担心的是恶性肿瘤能否治愈,而非保护恶性肿瘤不受到碰触。

若是恶性肿瘤,即使不进行切片,一样会转移或扩散,经由切片检查结果拟订后续的治疗策略,即早介入,在恶性肿瘤尚未扩散前即加以处置,才是有效控制肿瘤威胁的做法。

切片检查是癌症诊治的重要依据,对病人预后更有明确的助益。美国梅约医学中心即曾发表研究证实,接受切片检查的癌症患者,预后普遍较佳,存活期也较长。

研究团队将胰脏癌患者分为接受切片检查与未接受检查两组,并观察其病情变化。研究结果发现,接受切片检查的病人死亡率是 57% ,平均存活期为 22 个月;未接受切片的患者死亡率则为 76% ,平均存活期约为 15 个月。

要注意切片并发症

郑裕仁指出,切片的风险并非在于肿瘤本身,而在于出血或是相关的并发症,以肺部为例,切片检查可能导致气胸、咳血,即使比例不高,但风险还是存在,不可不慎。

有鉴于可能的风险,切片会配合于病人住院期间进行,若病人没有住院的必要性,也会要求病人接受切片后仍需在院观察 1~2 个小时,确认没有任何问题后再离开医院,且会让病人留下医院的紧急联络电话,若病人返家发现有异,可即刻与医疗人员取得联系,进行处置。

影像检查与切片检查各有其角色,配合影像结果、病人临床症状与血液检查等,可做为疾病类型的判断依据,不致于只要出现异常症状的病人,都得接受切片,但若怀疑是恶性肿瘤的可能性,切片介入是不可或缺的,在健保的给付上也是必要的条件。

与癌症这个大敌相比,切片的风险是可控制的,当医师告知需接受切片检查时,千万不要因为担忧切片可能的风险,反而延误癌症诊治的时间。

切片检查可避免不必要的手术

切片检查可避免不必要的手术,研究即发现,以深部肿瘤的胰脏癌为例,约有9%的患者开刀后,才发现是良性病变而非恶性肿瘤,若可事先经由切片检查得知,即可不必急着手术,甚至不需接受手术。

【本文摘自


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11586324.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存