0

我在 jupyter notebook 中使用了一个数学优化库(PICOS)。

在 PICOS 中,符号//&是用于垂直和水平连接的中缀运算符,用于从块中构建矩阵。请注意,我不能使用numpy.bmat,因为这些块不是 numpy 对象。

例如,如果我有一个块列表[A,B,C],我将通过将它们与符号水平连接来形成一个矩阵A & B & C。当列表包含数百个符号并且我无法手动构建矩阵时,就会出现问题。有没有一种简单的方法在列表中的每个符号之间插入中缀?

4

3 回答 3

0

使用内置reduce元函数(Python 2.7 docuPython 3 docu),将operators.and_(a, b)中缀运算符表示&为两个参数的函数:

from functools import reduce
from operators import and_

def concat_horizontal(iterable_of_affine_expressions):
    return reduce(and_, iterable_of_affine_expressions)
于 2017-01-17T00:10:04.937 回答
0
'&'.join([A,B,C])

或者

' & '.join([A,B,C])

如果你想在&

编辑:

也把它包在里面eval

eval(' & '.join([A,B,C]))
于 2017-01-16T23:30:24.047 回答
0

我应该不那么匆忙。我只是用递归函数做到了:

def concat_horizontal(lst):
if len(lst) == 2:
    return lst[0] & lst[1]
else:
    return concat_horizontal([lst[0] & lst[1]] + lst[2:]) 

和一个类似的垂直连接。耶,递归!

于 2017-01-16T23:38:23.543 回答