zoukankan      html  css  js  c++  java
  • Coding the Matrix Week 1 The Vector Space作业

    Coding the Matrix: Linear Algebra through Computer Science Applications 

      本周的作业较少,只有一个编程任务hw2.作业比较简单,如果大学学习过矩阵代数的话,基本上没有什么问题,不过要注意的一点是基2的Span的求法。

      基2空间上,在所有基向量中取任意个数个,叠加组合就得到了Span。但是如何取任意个呢?下面给出几种方法。

      一种方法是对于任意可能的个数,利用Python中的排列组合module生成对应于此个数的所有排列,即得到Span。感兴趣的话可以百度一下。这种方法概念较为清晰,但需要对Python的库较为了解。

      第二种方法,利用了从n个元素中任选任意个的方法只有2^n个的排列组合知识。具体来说,就是对于任意从0到2^n-1的整数,使用bin()函数得到其二进制表示,对应位为1即代表选中此基向量。这种方法稍微Smart一些。但过程较为冗杂。

      第三种,就是下面程序给出的方法,一行语句就可以完成运算,原理和上一种方法相同,就不再赘述。但要注意结果为0的情况下要单独考虑。

      其他的向量运算都比较简单,最后几道判断是否为向量空间的问题,只需要牢记向量空间三特征(包含0,加减和向量乘法组合仍在空间内)就不会出错。

      作业代码如下,模版中注释部分给出了验证范例。

    # version code 761
    # Please fill out this stencil and submit using the provided submission script.
    
    from vec import Vec
    from GF2 import one
    
    
    ## Problem 1
    def vec_select(veclist, k): 
        '''
        >>> D = {'a','b','c'}
        >>> v1 = Vec(D, {'a': 1})
        >>> v2 = Vec(D, {'a': 0, 'b': 1})
        >>> v3 = Vec(D, {        'b': 2})
        >>> v4 = Vec(D, {'a': 10, 'b': 10})
        >>> vec_select([v1, v2, v3, v4], 'a') == [Vec(D,{'b': 1}), Vec(D,{'b': 2})]
        True
        '''
        return [x for x in veclist if x[k]==0]
    
    def vec_sum(veclist, D): 
        '''
        >>> D = {'a','b','c'}
        >>> v1 = Vec(D, {'a': 1})
        >>> v2 = Vec(D, {'a': 0, 'b': 1})
        >>> v3 = Vec(D, {        'b': 2})
        >>> v4 = Vec(D, {'a': 10, 'b': 10})
        >>> vec_sum([v1, v2, v3, v4], D) == Vec(D, {'b': 13, 'a': 11})
        True
        '''
        return sum(veclist) if len(veclist)!=0 else Vec(D,{})
    
    def vec_select_sum(veclist, k, D): 
        '''
        >>> D = {'a','b','c'}
        >>> v1 = Vec(D, {'a': 1})
        >>> v2 = Vec(D, {'a': 0, 'b': 1})
        >>> v3 = Vec(D, {        'b': 2})
        >>> v4 = Vec(D, {'a': 10, 'b': 10})
        >>> vec_select_sum([v1, v2, v3, v4], 'a', D) == Vec(D, {'b': 3})
        True
        '''
        return vec_sum(vec_select(veclist,k),D)
    
    
    
    ## Problem 2
    def scale_vecs(vecdict):
        '''
        >>> v1 = Vec({1,2,3}, {2: 9})
        >>> v2 = Vec({1,2,4}, {1: 1, 2: 2, 4: 8})
        >>> scale_vecs({3: v1, 5: v2}) == [Vec({1,2,3},{2: 3.0}), Vec({1,2,4},{1: 0.2, 2: 0.4, 4: 1.6})]
        True
        '''
        return [y/x for (x,y) in vecdict.items()]
    
    
    
    ## Problem 3
    def GF2_span(D, L):
        '''
        >>> from GF2 import one
        >>> D = {'a', 'b', 'c'}
        >>> L = [Vec(D, {'a': one, 'c': one}), Vec(D, {'b': one})]
        >>> len(GF2_span(D, L))
        4
        >>> Vec(D, {}) in GF2_span(D, L)
        True
        >>> Vec(D, {'b': one}) in GF2_span(D, L)
        True
        >>> Vec(D, {'a':one, 'c':one}) in GF2_span(D, L)
        True
        >>> Vec(D, {x:one for x in D}) in GF2_span(D, L)
        True
        '''
        if len(L)==0:return []
        maxind=2**len(L)-1
        res=[sum([L[j] for j in range(len(L)) if i//(2**j)%2]) for i in range(maxind+1)]
        res.append(Vec(D,{}))
        del res[0]
        return res
    
    
    
    ## Problem 4
    # Answer with a boolean, please.
    
    is_it_a_vector_space_1 = True
    is_it_a_vector_space_2 = False
    
    
    
    ## Problem 5
    is_it_a_vector_space_3 = True
    is_it_a_vector_space_4 = False
    
    
    ## Problem 6
    
    is_it_a_vector_space_5 = True
    is_it_a_vector_space_6 = False
    


      

  • 相关阅读:
    leetcode701. Insert into a Binary Search Tree
    leetcode 958. Check Completeness of a Binary Tree 判断是否是完全二叉树 、222. Count Complete Tree Nodes
    leetcode 110. Balanced Binary Tree
    leetcode 104. Maximum Depth of Binary Tree 111. Minimum Depth of Binary Tree
    二叉树
    leetcode 124. Binary Tree Maximum Path Sum 、543. Diameter of Binary Tree(直径)
    5. Longest Palindromic Substring
    128. Longest Consecutive Sequence
    Mac OS下Android Studio的Java not found问题,androidfound
    安卓 AsyncHttpClient
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3231081.html
Copyright © 2011-2022 走看看