小编The*_*ONP的帖子

scipy.sparse矩阵的布尔运算

我有一组稀疏矩阵填充了布尔值,我需要执行逻辑运算(主要是元素方式OR).

如同在numpy中,用dtype ='bool'求和矩阵给出了元素的OR,但是有一个令人讨厌的副作用:

>>> from scipy import sparse
>>> [a,b] = [sparse.rand(5,5,density=0.1,format='lil').astype('bool')
...  for x in range(2)]
>>> b
<5x5 sparse matrix of type '<class 'numpy.bool_'>'
    with 2 stored elements in LInked List format>
>>> a+b
<5x5 sparse matrix of type '<class 'numpy.int8'>'
    with 4 stored elements in Compressed Sparse Row format>
Run Code Online (Sandbox Code Playgroud)

数据类型更改为"int8",这会导致将来的操作出现问题.这可以通过以下方式得到解决:

(a+b).astype('bool')
Run Code Online (Sandbox Code Playgroud)

但我得到的印象是,所有这种类型的改变都会导致性能下降.

为什么结果的dtype与操作数不同?
有没有更好的方法在python中对稀疏矩阵进行逻辑运算?

python scipy sparse-matrix

10
推荐指数
2
解决办法
3733
查看次数

减少Python中的二进制模式

我认为这是一个有点有趣的问题,即使只是从编程练习的角度来看.

我有一长串二进制模式,我希望将其缩减为更紧凑的形式以呈现给用户.要遵循的符号是' - '可以表示'1'或'0',因此['1011','1010']可以用['101-']和表示

['1100', '1000', '0100', '0000', '1111', '1011', '0111', '0011']
Run Code Online (Sandbox Code Playgroud)

可以用['--00', '--11'].来表示.请注意,所有模式的长度始终相同(尽管可能长于4位).

扩展模式相当简单,减少它们有点棘手.

我已经提出了一些可以实现这一目标的代码,但它很长,很慢,而且难以阅读.

def reducePatterns(patterns):
    '''Reduce patterns into compact dash notation'''
    newPatterns = []  #reduced patterns
    matched = []      #indexes with a string that was already matched
    for x,p1 in enumerate(patterns):    #pattern1
        if x in matched: continue       #skip if this pattern has already been matched
        for y,p2 in enumerate(patterns[x+1:],1):
            if x+y in matched: continue #skip if this pattern has already been …
Run Code Online (Sandbox Code Playgroud)

python

6
推荐指数
1
解决办法
431
查看次数

沿阵列对角线包裹/展开矢量

我一直在寻找一种方法(更有效,只是编写循环遍历矩阵)从包装对角线顺序给出的元素创建矩阵,并按此顺序提取值.举个例子,a = [2,3,4,5,6,7]我希望能够生成数组

[  0,  2,  5,  7,
   0,  0,  3,  6,
   0,  0,  0,  4,
   0,  0,  0,  0]
Run Code Online (Sandbox Code Playgroud)

并且还能够a从该阵列中重新提取.

scipy.sparse.diags实现了很多这样的东西,但顾名思义是为稀疏数组.numpy中是否有任何类型的功能可以提供此功能,或者某种形式的基于对角线的索引?或者也许某种类型的数组转换会使这更可行?

python numpy

5
推荐指数
1
解决办法
177
查看次数

这个赋值语句中的逗号有什么作用?

我正在查看我发现的一个有趣的示例脚本(在这个站点,最后一个示例行124),我正在努力理解particles这行中的逗号是什么:

particles, = ax.plot([], [], 'bo', ms=6)
Run Code Online (Sandbox Code Playgroud)

如果省略逗号,脚本将出现错误,但语法(似乎类似于解包语句)对我来说没有多大意义,并且像

a, = [2,3]
Run Code Online (Sandbox Code Playgroud)

失败,这似乎是反对解包理论的论据.

任何见解将不胜感激.

python tuples variable-assignment

2
推荐指数
2
解决办法
206
查看次数