Python中文
首页
教程
问答
标签
搜索
登录
注册
向量与csr_矩阵的左乘法
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我有一个大小为50*10000的csr格式稀疏矩阵<code>A</code>,和一个大小为50的np.array <code>v</code>,我想为其计算乘积<code>v.dot(A)</code>。我如何有效地做到这一点</p> <p>当然,运行<code>v.dot(A)</code>不是一个好主意,因为scipy.sparse不支持np操作。不幸的是,据我所知,scipy.sparse没有矩阵与向量左乘的函数</p> <p>我尝试过以下方法,但所有这些方法似乎都花费了大量时间:</p> <ol> <li><strong>转座A并使用标准<code>.dot</code></strong></li> </ol> <p>我转置A,然后使用<code>.dot</code>方法。它将<code>A.T</code>与<code>v</code>相乘作为列向量</p> <pre><code>``` >>> A = sparse.csr_matrix([[1, 2, 0, 0], ... [0, 0, 3, 4]]) >>> v = np.array([1, 1]) >>> A.T.dot(v) array([1, 2, 3, 4], dtype=int32) ``` </code></pre> <ol start=“2”> <li><strong>对v进行转置,并使用乘法和求和方法</strong></li> </ol> <p>我正在使用<code>csr_matrix.multiply()</code>方法,它执行逐点乘法。我将对这些行求和</p> <pre><code>>>> vt = v[np.newaxis].T >>> A.multiply(vt).sum(axis=0) matrix([[1, 2, 3, 4]], dtype=int32) </code></pre> <ol start=“3”> <li><strong>将v转换为稀疏矩阵并使用<code>.dot</code>方法</strong></li> </ol> <p>我尝试了不同的施工方法,似乎都很昂贵。这是最具可读性的示例(可能不是最有效的示例):</p> <pre><code>>>> sparse_v = sparse.csr_matrix(v) >>> sparse_v.dot(A).todense() matrix([[1, 2, 3, 4]], dtype=int32) </code></pre> <p>方法1是目前最快的,但是<code>.T</code>方法仍然非常耗时。难道没有更好的方法在稀疏矩阵上执行左乘法吗</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>@operator也适用于scipy稀疏矩阵,与您的方法进行简短而粗略的性能比较表明@operator的性能与您的方法1类似</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
如何实现一个类,该类在每次更改其属性时更改其“last_edited”变量?
5 回答
如何实现一个类?
5 回答
如何实现一个类的属性设置?
5 回答
如何实现一个能够存储输入并反复访问输入的存储系统?GPA计算器
2 回答
如何实现一个自定义的keras层,它只保留前n个值,其余的都归零?
5 回答
如何实现一个行为类似于Python中序列的最小类?
8 回答
如何实现一个请求的多线程或多处理
1 回答
如何实现一个长时间运行的、事件驱动的python程序?
1 回答
如何实现一个颜色一致的非舔深度地图实时?
5 回答
如何实现一个默认的SQLAlchemy模型类,它包含用于继承的公共CRUD方法?
1 回答
如何实现一次热编码的生成函数
9 回答
如何实现一种在数组中删除对的方法
8 回答
如何实现一类支持向量机用于图像异常检测
10 回答
如何实现一维阵列到二维阵列的复制转换
7 回答
如何实现三维三次样条插值?
4 回答
如何实现三维数据的连接组件标签?
7 回答
如何实现三角形的空间索引
3 回答
如何实现不同模块中对象之间的交互
8 回答
如何实现不同版本的库共存?
3 回答
如何实现不同的班权重
2 回答