Python中的稀疏随机矩阵,其范围不同于[0,1]
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python中的稀疏随机矩阵,其范围不同于[0,1],小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1931字,纯文字阅读大概需要3分钟。
内容图文
![Python中的稀疏随机矩阵,其范围不同于[0,1]](/upload/InfoBanner/zyjiaocheng/805/c40544cd2d3343be8521132bcdfda96b.jpg)
我需要在Python中生成一个稀疏的随机矩阵,所有值都在[-1,1]范围内,并且分布均匀.最有效的方法是什么?
我有一个基本的稀疏随机矩阵:
from scipy import sparse
from numpy.random import RandomState
p = sparse.rand(10, 10, 0.1, random_state=RandomState(1))
这给了我[0,1]中的值:
print p
(0, 0) 0.419194514403
(0, 3) 0.0273875931979
(1, 4) 0.558689828446
(2, 7) 0.198101489085
(3, 5) 0.140386938595
(4, 1) 0.204452249732
(4, 3) 0.670467510178
(8, 1) 0.878117436391
(9, 0) 0.685219500397
(9, 3) 0.417304802367
最好有一个就地解决方案或不需要将其吹到完整矩阵的东西,因为在实践中我将使用非常大的尺寸.令我惊讶的是,没有为sparse.rand本身设置一些快速参数.
解决方法:
看起来您想要的功能大约两个月前添加,并将在scipy 0.16:https://github.com/scipy/scipy/blob/77af8f44bef43a67cb14c247bc230282022ed0c2/scipy/sparse/construct.py#L671中提供
您将能够调用sparse.random(10,10,0.1,random_state = RandomState(1),data_fvs = func),其中func“应该使用一个参数来指定它将返回的ndarray的长度.结构非零条目将从该函数采样的数组中获取稀疏随机矩阵.“因此,您将能够提供任意分布样本.
现在,你可以通过将p乘以标量N来至少将均匀分布拉伸到[0,N]:
>>> print 2*p
(0, 0) 0.838389028807
(9, 0) 1.37043900079
(4, 1) 0.408904499463
(8, 1) 1.75623487278
(0, 3) 0.0547751863959
(4, 3) 1.34093502036
(9, 3) 0.834609604734
(1, 4) 1.11737965689
(3, 5) 0.28077387719
(2, 7) 0.39620297817
你不能添加标量,但是作为一个黑客你可以使用p.ceil()创建一个非零元素中所有的稀疏矩阵,因为p的所有元素都是在[0,1]内生成的.然后将均匀分布转换为[-1,1]即可
print 2*p - p.ceil()
(0, 0) -0.161610971193
(0, 3) -0.945224813604
(1, 4) 0.117379656892
(2, 7) -0.60379702183
(3, 5) -0.71922612281
(4, 1) -0.591095500537
(4, 3) 0.340935020357
(8, 1) 0.756234872782
(9, 0) 0.370439000794
(9, 3) -0.165390395266
所以一般来说,如果你需要一些间隔[a,b],只需执行:
p = (b - a)*p + a*p.ceil()
我目前看不到更好的解决方案,而不是编写类似于sparse.rand的自己的构造函数,但我很想知道是否有人至少知道如何绕过ceil()hack.
内容总结
以上是互联网集市为您收集整理的Python中的稀疏随机矩阵,其范围不同于[0,1]全部内容,希望文章能够帮你解决Python中的稀疏随机矩阵,其范围不同于[0,1]所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。