Ejemplo n.º 1
0
def QR_solve(A):
    col_labels = sorted(A.D[1], key=repr)
    Acolms = dict2list(mat2coldict(A), col_labels)
    (Qlist, Rlist) = aug_orthogonalize(Acolms)
    Q = coldict2mat(list2dict(Qlist, col_labels))
    R = coldict2mat(list2dict(Rlist, col_labels))
    return Q, R
Ejemplo n.º 2
0
def QR_solve(A, b):
    '''
    Input:
        - A: a Mat
        - b: a Vec
    Output:
        - vector x that minimizes norm(b - A*x)
    Example:
        >>> domain = ({'a','b','c'},{'A','B'})
        >>> A = Mat(domain,{('a','A'):-1, ('a','B'):2,('b','A'):5, ('b','B'):3,('c','A'):1,('c','B'):-2})
        >>> Q, R = QR.factor(A)
        >>> b = Vec(domain[0], {'a': 1, 'b': -1})
        >>> x = QR_solve(A, b)
        >>> result = A.transpose()*(b-A*x)
        >>> result * result < 1E-10
        True
    '''
    from triangular import triangular_solve
    from QR import factor
    from dictutil import dict2list
    from vecutil import vec2list

    Q,R = factor(A)
    b = Q.transpose()*b
    rowdict = mat2rowdict(R)
    rowlist = dict2list(rowdict, list(rowdict.keys()))
    x = triangular_solve(rowlist, list(rowlist[0].D), vec2list(b))
    return x
def QR_factor(A):
    col_labels = sorted(A.D[1], key=repr)
    Acols = dict2list(mat2coldict(A),col_labels)
    Qlist, Rlist = aug_orthonormalize(Acols)
    #Now make Mats
    Q = coldict2mat(Qlist)
    R = coldict2mat(list2dict(Rlist, col_labels))
    return Q,R
Ejemplo n.º 4
0
def QR_factor(A):
    col_labels = sorted(A.D[1], key=repr)
    Acols = dict2list(mat2coldict(A), col_labels)
    Qlist, Rlist = aug_orthonormalize(Acols)
    #Now make Mats
    Q = coldict2mat(Qlist)
    R = coldict2mat(list2dict(Rlist, col_labels))
    return Q, R
Ejemplo n.º 5
0
def factor(A):
    """ Implementation of the Gram-Schmidt procedure.
    """
    col_labels = sorted(A.D[1], key=hash)
    Acols = dict2list(matrix2coldict(A), col_labels)
    Qlist, Rlist = aug_orthonormalize(Acols)
    # Now make Matrices
    Q = coldict2mat(Qlist)
    R = coldict2mat(list2dict(Rlist, col_labels))
    return Q, R
Ejemplo n.º 6
0
def is_invertible(M):
    '''
    input: A matrix, M
    outpit: A boolean indicating if M is invertible.

    >>> M = Mat(({0, 1, 2, 3}, {0, 1, 2, 3}), {(0, 1): 0, (1, 2): 1, (3, 2): 0, (0, 0): 1, (3, 3): 4, (3, 0): 0, (3, 1): 0, (1, 1): 2, (2, 1): 0, (0, 2): 1, (2, 0): 0, (1, 3): 0, (2, 3): 1, (2, 2): 3, (1, 0): 0, (0, 3): 0})
    >>> is_invertible(M)
    True
    '''
    if len(M.D[0]) != len(M.D[1]):
        return False
    if not my_is_independent(dict2list(mat2coldict(M), list(M.D[1]))):
        return False
    return True
def aug_orthonormalize(L):
    '''
    Input:
        - L: a list of Vecs
    Output:
        - A pair Qlist, Rlist such that:
            * coldict2mat(L) == coldict2mat(Qlist) * coldict2mat(Rlist)
            * Qlist = orthonormalize(L)

    >>> from vec import Vec
    >>> D={'a','b','c','d'}
    >>> L = [Vec(D, {'a':4,'b':3,'c':1,'d':2}), Vec(D, {'a':8,'b':9,'c':-5,'d':-5}), Vec(D, {'a':10,'b':1,'c':-1,'d':5})]
    >>> Qlist, Rlist = aug_orthonormalize(L)
    >>> from matutil import coldict2mat
    >>> print(coldict2mat(Qlist))
    <BLANKLINE>
    0      1      2
    ---------------------
    b  |  0.548  0.403 -0.653
    a  |   0.73  0.187  0.528
    c  |  0.183 -0.566 -0.512
    d  |  0.365 -0.695  0.181
    <BLANKLINE>
    >>> print(coldict2mat(Rlist))
    <BLANKLINE>
    0    1      2
    ------------------
    0  |  5.48 8.03   9.49
    1  |     0 11.4 -0.636
    2  |     0    0   6.04
    <BLANKLINE>
    >>> print(coldict2mat(Qlist)*coldict2mat(Rlist))
    <BLANKLINE>
    0  1  2
    ---------
    b  |  3  9  1
    a  |  4  8 10
    c  |  1 -5 -1
    d  |  2 -5  5
    '''
    pass
    Qlist = orthonormalize(L)
    Qlist_unormalized , Rlist = aug_orthogonalize(L)
    v = [(item*item)**(1/2) for item in Qlist_unormalized]
    multipliers = mat2rowdict(coldict2mat(Rlist))
    Rlist = mat2coldict(rowdict2mat(adjust(v, multipliers)))
    Rlist = dict2list(Rlist, range(len(Qlist)))
    return Qlist, Rlist
Ejemplo n.º 8
0
def orSearch(inverseIndex, query):
    '''
    Find documents that contain any words in the query list.
    Parameters
        inverseIndex:  dictionary with words as keys
        and indexes of strings in strlist where the word
        appears as values (values are in a set)
        query: list of words
    Returns
        S: set of document indexes containing any of the words
    '''
    S = set()
    docs = dict2list(inverseIndex, query)
    for e in docs:
        S.update(e)
    return S
Ejemplo n.º 9
0
def find_triangular_matrix_inverse(A):
    '''
    input: An upper triangular Mat, A, with nonzero diagonal elements
    output: Inverse of A
    >>> A = listlist2mat([[1, .5, .2, 4],[0, 1, .3, .9],[0,0,1,.1],[0,0,0,1]])
    >>> find_triangular_matrix_inverse(A) == Mat(({0, 1, 2, 3}, {0, 1, 2, 3}), {(0, 1): -0.5, (1, 2): -0.3, (3, 2): 0.0, (0, 0): 1.0, (3, 3): 1.0, (3, 0): 0.0, (3, 1): 0.0, (2, 1): 0.0, (0, 2): -0.05000000000000002, (2, 0): 0.0, (1, 3): -0.87, (2, 3): -0.1, (2, 2): 1.0, (1, 0): 0.0, (0, 3): -3.545, (1, 1): 1.0})
    True
    '''
    D = A.D[0]
    I = Mat((D,D), {(d,d):1 for d in D})
    col_I = mat2coldict(I)
    rowdict_A = mat2rowdict(A)
    rowlist_A = dict2list(rowdict_A, list(D))
    B = dict()
    for i in col_I.keys():
        B[i] = triangular_solve(rowlist_A, list(D), col_I[i])
    return coldict2mat(B)
Ejemplo n.º 10
0
def andSearch(inverseIndex, query):
    '''
    Find documents that contain all words in the query list.
    Parameters
        inverseIndex:  dictionary with words as keys
        and indexes of strings in strlist where the word
        appears as values (values are in a set)
        query: list of words
    Returns
        S: set of document indexes containing all of the words
    '''
    docs = dict2list(inverseIndex, query)
    for i, e in enumerate(docs):
        if i == 0:
            S = set(e)
        else:
            S.intersection_update(e)
    return S
Ejemplo n.º 11
0
def fog(d1, d2):
    import dictutil
    d1k = list(d1.keys())
    d1v = dictutil.dict2list(d1, d1.keys())
    d2v = dictutil.dict2list(d2, d1v)
    return dictutil.list2dict(d2v, d1k)
Ejemplo n.º 12
0
def fog(d1,d2):
    import dictutil
    d1k=list(d1.keys())
    d1v=dictutil.dict2list(d1,d1.keys())
    d2v=dictutil.dict2list(d2,d1v)
    return dictutil.list2dict(d2v,d1k)
Ejemplo n.º 13
0
all_3_digit_numbers(3, {0,1,2})

#0.6
#Task 0.6.1
import math
help(math)
math.sqrt(3)
#Task 0.6.2
from random import randint
randint(1,10)
def movie_review(name): return ["See it","A gem!","Ideologcial claptrap!"][randint(0,2)]
movie_review('hello')

#Task 0.6.3
import dictutil
dictutil.dict2list({'a':'A','b':'B','c':'C'},['b','c','a'])
dictutil.list2dict(['A','B','C'], ['a','b','c'])

from importlib import reload
reload(dictutil)
#Task 0.6.4
dictutil.listrange2dict(['A','B','C'])

for x in {1,2,3}:
    print(x)

v = [1,2,0]
i = 0
while v[i] == 0:
    print(v[i])
    i = i + 1
Ejemplo n.º 14
0
def baseSearch(merge_policy, invIndex, query):
    return reduce(merge_policy, dictutil.dict2list(invIndex, query))