对于稀疏的科学矩阵,将行设置为零的最有效方法是什么?

亚历克斯·雷肯

我正在尝试将以下MATLAB代码转换为Python,并且无法找到在任何合理的时间内都能工作的解决方案。

M = diag(sum(a)) - a;
where = vertcat(in, out);
M(where,:) = 0;
M(where,where) = 1;

在这里,a是一个稀疏矩阵,而在这里是一个向量(按in / out排列)。我使用Python的解决方案是:

M = scipy.sparse.diags([degs], [0]) - A
where = numpy.hstack((inVs, outVs)).astype(int)
M = scipy.sparse.lil_matrix(M)
M[where, :] = 0  # This is the slowest line
M[where, where] = 1
M = scipy.sparse.csc_matrix(M)

但是由于A为334863x334863,因此大约需要三分钟。如果有人对如何加快此速度有任何建议,请贡献他们!为了进行比较,MATLAB很快就完成了这一步骤。

谢谢!

我用于与@seberg相似的任务属性的解决方案并且不转换为lil格式:

import scipy.sparse
import numpy
import time

def csr_row_set_nz_to_val(csr, row, value=0):
    """Set all nonzero elements (elements currently in the sparsity pattern)
    to the given value. Useful to set to 0 mostly.
    """
    if not isinstance(csr, scipy.sparse.csr_matrix):
        raise ValueError('Matrix given must be of CSR format.')
    csr.data[csr.indptr[row]:csr.indptr[row+1]] = value

def csr_rows_set_nz_to_val(csr, rows, value=0):
    for row in rows:
        csr_row_set_nz_to_val(csr, row)
    if value == 0:
        csr.eliminate_zeros()

安排评估时间

def evaluate(size):
    degs = [1]*size
    inVs = list(xrange(1, size, size/25))
    outVs = list(xrange(5, size, size/25))
    where = numpy.hstack((inVs, outVs)).astype(int)
    start_time = time.time()
    A = scipy.sparse.csc_matrix((size, size))
    M = scipy.sparse.diags([degs], [0]) - A
    csr_rows_set_nz_to_val(M, where)
    return time.time()-start_time

并测试其性能:

>>> print 'elapsed %.5f seconds' % evaluate(334863)
elapsed 0.53054 seconds

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

对于稀疏的科学矩阵,将行设置为零的最有效方法是什么?

来自分类Dev

将最高有效设置位以下的所有位归零的最有效方法是什么?

来自分类Dev

从值列表转换为稀疏矩阵的最有效方法是什么?

来自分类Dev

有效地将大量SciPy稀疏矩阵条目设置为零

来自分类Dev

将元组一分为二的最有效方法是什么?

来自分类Dev

从长(且合理)稀疏向量中选择随机元素的最有效方法是什么?

来自分类Dev

存储可变大小的矩阵组最有效的方法是什么?

来自分类Dev

在Objective C中,最有效的矩阵运算方法是什么?GLKit或CC

来自分类Dev

比较2个Numpy矩阵的每个值的最有效方法是什么?

来自分类Dev

遍历列表和设置最大值Python的最有效方法是什么?

来自分类Dev

在大型数组中设置顺序项子集的最有效方法是什么?

来自分类Dev

为网页的动画标头编码的最有效方法是什么?

来自分类Dev

检查 C++ 容器是否为空的最有效方法是什么?

来自分类Dev

时间序列:为子集编写代码的最有效方法是什么?

来自分类Dev

获得具有最大值的行的最有效方法是什么?

来自分类Dev

标识具有不同值的行的最有效方法是什么

来自分类Dev

将R中的稀疏矩阵的对角线归零的内存有效方法

来自分类Dev

过滤单个资源最有效的方法是什么?

来自分类Dev

使wifi工作最有效的方法是什么?

来自分类Dev

读取大文件的最有效方法是什么?

来自分类Dev

列出目录的最有效方法是什么?

来自分类Dev

遍历图片像素的最有效方法是什么

来自分类Dev

获取数字总和的最有效方法是什么?

来自分类Dev

在Haxe中循环最有效的方法是什么?

来自分类Dev

使wifi工作最有效的方法是什么?

来自分类Dev

Emacs:删除报价最有效的方法是什么?

来自分类Dev

筛选搜索的最有效方法是什么?

来自分类Dev

检测nmap扫描的最有效方法是什么?

来自分类Dev

绘制网格最有效的方法是什么?

Related 相关文章

  1. 1

    对于稀疏的科学矩阵,将行设置为零的最有效方法是什么?

  2. 2

    将最高有效设置位以下的所有位归零的最有效方法是什么?

  3. 3

    从值列表转换为稀疏矩阵的最有效方法是什么?

  4. 4

    有效地将大量SciPy稀疏矩阵条目设置为零

  5. 5

    将元组一分为二的最有效方法是什么?

  6. 6

    从长(且合理)稀疏向量中选择随机元素的最有效方法是什么?

  7. 7

    存储可变大小的矩阵组最有效的方法是什么?

  8. 8

    在Objective C中,最有效的矩阵运算方法是什么?GLKit或CC

  9. 9

    比较2个Numpy矩阵的每个值的最有效方法是什么?

  10. 10

    遍历列表和设置最大值Python的最有效方法是什么?

  11. 11

    在大型数组中设置顺序项子集的最有效方法是什么?

  12. 12

    为网页的动画标头编码的最有效方法是什么?

  13. 13

    检查 C++ 容器是否为空的最有效方法是什么?

  14. 14

    时间序列:为子集编写代码的最有效方法是什么?

  15. 15

    获得具有最大值的行的最有效方法是什么?

  16. 16

    标识具有不同值的行的最有效方法是什么

  17. 17

    将R中的稀疏矩阵的对角线归零的内存有效方法

  18. 18

    过滤单个资源最有效的方法是什么?

  19. 19

    使wifi工作最有效的方法是什么?

  20. 20

    读取大文件的最有效方法是什么?

  21. 21

    列出目录的最有效方法是什么?

  22. 22

    遍历图片像素的最有效方法是什么

  23. 23

    获取数字总和的最有效方法是什么?

  24. 24

    在Haxe中循环最有效的方法是什么?

  25. 25

    使wifi工作最有效的方法是什么?

  26. 26

    Emacs:删除报价最有效的方法是什么?

  27. 27

    筛选搜索的最有效方法是什么?

  28. 28

    检测nmap扫描的最有效方法是什么?

  29. 29

    绘制网格最有效的方法是什么?

热门标签

归档