您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

从矩阵有效地减去向量(Scipy)

从矩阵有效地减去向量(Scipy)

首先,我们将如何处理密集阵列?

mat-vec.A # taking advantage of broadcasting
mat-vec.A[:,[0]*3] # explicit broadcasting
mat-vec[:,[0,0,0]] # that also works with csr matrix

https://codereview.stackexchange.com/questions/32664/numpy-scipy- optimization/33566中, 我们发现as_stridedmat.indptr向量上使用是逐步浏览稀疏矩阵行的最有效方法。(本x.rowsx.cols一个lil_matrix是几乎一样好。getrow很慢)。该功能实现了迭代。

def sum(X,v):
    rows, cols = X.shape
    row_start_stop = as_strided(X.indptr, shape=(rows, 2),
                            strides=2*X.indptr.strides)
    for row, (start, stop) in enumerate(row_start_stop):
        data = X.data[start:stop]
        data -= v[row]

sum(mat, vec.A)
print mat.A

vec.A为了简单起见使用。如果我们保持vec稀疏状态,则必须在处添加一个非零值的测试row。同样,这种类型的迭代只会修改的非零元素mat0's不变。

我怀疑时间优势将在很大程度上取决于矩阵和向量的稀疏性。如果vec有很多零,则进行迭代是有意义的,仅修改mat其中vec非零的那些行。但是vec像这样的例子几乎是密集的,可能很难被击败mat- vec.A

其他 2022/1/1 18:28:01 有568人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶