【问题标题】:Simple way to create matrix of random numbers创建随机数矩阵的简单方法
【发布时间】:2013-03-16 16:52:38
【问题描述】:

我正在尝试创建一个随机数矩阵,但我的解决方案太长而且看起来很丑

random_matrix = [[random.random() for e in range(2)] for e in range(3)]

这看起来不错,但在我的实现中它是

weights_h = [[random.random() for e in range(len(inputs[0]))] for e in range(hiden_neurons)]

这是非常不可读的,不适合一行。

【问题讨论】:

    标签: python random coding-style


    【解决方案1】:

    你可以放弃range(len())

    weights_h = [[random.random() for e in inputs[0]] for e in range(hiden_neurons)]
    

    但实际上,您可能应该使用 numpy。

    In [9]: numpy.random.random((3, 3))
    Out[9]:
    array([[ 0.37052381,  0.03463207,  0.10669077],
           [ 0.05862909,  0.8515325 ,  0.79809676],
           [ 0.43203632,  0.54633635,  0.09076408]])
    

    【讨论】:

    • 如何获取随机整数?
    • numpy.random.random_integers(low, high, shape),例如numpy.random.random_integers(0, 100, (3, 3))
    • 随机签名中使用的双括号符号的术语是什么?我不熟悉它。
    • @EmileVictor numpy.random.random 像许多其他 numpy.random 方法一样接受形状,即 N 元组。所以实际上外部括号表示调用方法numpy.random.random(),内部括号是用于实例化传递给函数的元组(3, 3)的语法糖。
    • numpy.random.random_integers() 已弃用。请改用numpy.random.randint()docs.scipy.org/doc/numpy/reference/generated/…
    【解决方案2】:

    看看numpy.random.rand

    文档字符串:rand(d0, d1, ..., dn)

    给定形状的随机值。

    创建一个给定形状的数组并随机传播它 来自[0, 1) 上的均匀分布的样本。


    >>> import numpy as np
    >>> np.random.rand(2,3)
    array([[ 0.22568268,  0.0053246 ,  0.41282024],
           [ 0.68824936,  0.68086462,  0.6854153 ]])
    

    【讨论】:

      【解决方案3】:

      使用 np.random.randint(),因为 np.random.random_integers() 已弃用

      random_matrix = np.random.randint(min_val,max_val,(<num_rows>,<num_cols>))
      

      【讨论】:

        【解决方案4】:

        看起来您正在执行 Coursera 机器学习神经网络练习的 Python 实现。这是我为 randInitializeWeights(L_in, L_out) 所做的

        #get a random array of floats between 0 and 1 as Pavel mentioned 
        W = numpy.random.random((L_out, L_in +1))
        
        #normalize so that it spans a range of twice epsilon
        W = W * 2 * epsilon
        
        #shift so that mean is at zero
        W = W - epsilon
        

        【讨论】:

          【解决方案5】:

          首先,创建numpy 数组,然后将其转换为matrix。请看下面的代码:

          import numpy
          
          B = numpy.random.random((3, 4)) #its ndArray
          C = numpy.matrix(B)# it is matrix
          print(type(B))
          print(type(C)) 
          print(C)
          

          【讨论】:

            【解决方案6】:

            为了创建一个随机数数组,NumPy 提供了数组创建使用:

            1. 实数

            2. 整数

            使用随机实数创建数组: 有2个选项

            1. random.rand(用于生成随机数的均匀分布)
            2. random.randn(用于生成随机数的正态分布)

            random.rand

            import numpy as np 
            arr = np.random.rand(row_size, column_size) 
            

            random.randn

            import numpy as np 
            arr = np.random.randn(row_size, column_size) 
            

            使用随机整数创建数组:

            import numpy as np
            numpy.random.randint(low, high=None, size=None, dtype='l')
            

            在哪里

            • low = 要从分布中提取的最低(有符号)整数
            • high(optional)= 如果提供,则高于要从分布中提取的最大(有符号)整数
            • size(optional) = 输出形状,即如果给定形状是,例如,(m, n, k),则绘制 m * n * k 个样本
            • dtype(optional) = 结果的所需 dtype。

            例如:

            给定的示例将生成一个介于 0 和 4 之间的随机整数数组,其大小为 5*5 并且有 25 个整数

            arr2 = np.random.randint(0,5,size = (5,5))
            

            为了创建5乘5矩阵,应该修改为

            arr2 = np.random.randint(0,5,size = (5,5)),将乘法符号*改为逗号,#

            [[2 1 1 0 1][3 2 1 4 3][2 3 0 3 3][1 3 1 0 0][4 1 2 0 1]]

            eg2:

            给定的示例将生成一个介于 0 和 1 之间的随机整数数组,其大小为 1*10,并且有 10 个整数

            arr3= np.random.randint(2, size = 10)
            

            [0 0 0 0 1 1 0 0 1 1]

            【讨论】:

              【解决方案7】:
              x = np.int_(np.random.rand(10) * 10)
              

              对于 10 中的随机数。对于 20 中的随机数,我们必须乘以 20。

              【讨论】:

                【解决方案8】:

                当您说“随机数矩阵”时,您可以将 numpy 用作上面提到的 Pavel https://stackoverflow.com/a/15451997/6169225,在这种情况下,我假设您与这些(伪)随机数所遵循的分布无关。

                但是,如果您需要特定的分布(我想您对均匀分布感兴趣),numpy.random 为您提供了非常有用的方法。例如,假设您想要一个 3x2 矩阵,其具有以 [low,high] 为界的伪随机均匀分布。你可以这样做:

                numpy.random.uniform(low,high,(3,2))
                

                注意,您可以将uniform 替换为此库支持的任意数量的发行版。

                延伸阅读:https://docs.scipy.org/doc/numpy/reference/routines.random.html

                【讨论】:

                  【解决方案9】:

                  创建随机整数数组的简单方法是:

                  matrix = np.random.randint(maxVal, size=(rows, columns))
                  

                  以下输出 0 到 10 的随机整数的 2 x 3 矩阵:

                  a = np.random.randint(10, size=(2,3))
                  

                  【讨论】:

                    【解决方案10】:
                    random_matrix = [[random.random for j in range(collumns)] for i in range(rows)
                    for i in range(rows):
                        print random_matrix[i]
                    

                    【讨论】:

                    • 解释循环是应该避免的典型情况。使用更快且简化代码的 numpy C 矢量化操作。 random_matrix = numpy.random.rand(rows, columns) (random.rand)
                    【解决方案11】:

                    使用 map-reduce 的答案:-

                    map(lambda x: map(lambda y: ran(),range(len(inputs[0]))),range(hiden_neurons))
                    

                    【讨论】:

                      【解决方案12】:
                      #this is a function for a square matrix so on the while loop rows does not have to be less than cols.
                      #you can make your own condition. But if you want your a square matrix, use this code.
                      
                      import random
                      
                      import numpy as np
                      
                      def random_matrix(R, cols):
                      
                              matrix = []
                      
                              rows =  0
                      
                              while  rows < cols:
                      
                                  N = random.sample(R, cols)
                      
                                  matrix.append(N)
                      
                                  rows = rows + 1
                      
                          return np.array(matrix)
                      
                      print(random_matrix(range(10), 5))
                      #make sure you understand the function random.sample
                      

                      【讨论】:

                        【解决方案13】:

                        numpy.random.rand(row, column) 根据给定的 (m,n) 参数生成 0 到 1 之间的随机数。所以用它来创建一个 (m,n) 矩阵,并将矩阵乘以范围限制,然后将其与上限相加。

                        分析:如果生成零,将保持下限,但如果生成一,将保持上限。换句话说,使用 rand numpy 生成限制,您可以生成所需的极端数字。

                        import numpy as np
                        
                        high = 10
                        low = 5
                        m,n = 2,2
                        
                        a = (high - low)*np.random.rand(m,n) + low
                        

                        输出:

                        a = array([[5.91580065, 8.1117106 ],
                                  [6.30986984, 5.720437  ]])
                        

                        【讨论】:

                          猜你喜欢
                          • 2016-04-14
                          • 2014-09-21
                          • 1970-01-01
                          • 1970-01-01
                          • 2020-02-17
                          • 1970-01-01
                          • 1970-01-01
                          • 2014-07-29
                          • 2014-05-25
                          相关资源
                          最近更新 更多