如何在python

时间:2016-12-28 21:51:21

标签: python matrix random theano

假设X是一个矩阵。以下命令生成一个形状为X的矩阵,随机选择01之间的成员80%成员为1其余成员0)。

srng = RandomStreams()    
srng.binomial(X.shape, p=0.8)

问题是如何在1和另一个数字2.5之间建立类似的随机矩阵。换句话说,我需要一个形状为X的矩阵,随机选择成员12.5之间的成员80%成员1其余的2.5

4 个答案:

答案 0 :(得分:1)

与制作在平面中交叉2点的线的方式相同

y = m*x + a

选择ma,这样当x = 0是区间的下限时,x = 1是另一个极端。

因此,对于[a,b]区间,它是y = (b-a)x + a

在[1.2.5]的情况下,a = 1且m = 1.5,但在您的情况下a是纯1的矩阵。

也许你的图书馆还有其他一些实用程序可以做到这一点,但是当其他一切都失败时,这总是可行的

答案 1 :(得分:0)

这样的事情怎么样?

import random

def create_matrix(width, height):
    mat = []
    for i in range(height):
        mat.append([]) # create sublist for each height level
        for _ in range(width):
            # generate a random number in inclusive range [1, 5]
            random_number = random.randint(1, 5)
            # 80% chance the number is one of 1, 2, 3, or 4 (arbitrary; could be 1, 3, 4, or 5, just not the entire range)
            if random_number in {1, 2, 3, 4}:
                mat[i].append(1)
            # 20% chance it's 5
            else:
                mat[i].append(2.5)
    return mat

一个结果:

>>> print(create_matrix(10, 10))
[[1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [2.5, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 2.5, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 2.5, 2.5], [2.5, 1, 1, 1, 1, 1, 1, 1, 1, 1], [2.5, 1, 1, 1, 1, 2.5, 1, 1, 2.5, 2.5], [1, 2.5, 1, 1, 1, 2.5, 1, 1, 2.5, 1], [1, 1, 1, 2.5, 2.5, 1, 1, 1, 1, 1], [1, 1, 1, 1, 2.5, 1, 1, 1, 2.5, 1], [1, 2.5, 1, 1, 1, 1, 1, 1, 2.5, 1]]

我们可以验证您指定的比例12.5匹配(或非常接近)的数量:

>>> {number: [val for row in mat for val in row].count(number) for number in {1, 2.5}}
{1: 82, 2.5: 18}

通过多次迭代,这些比例将分别接近80%和20%。但随机机会会围绕这些方式产生一些变化。

请注意,这并不能确保每行至少有一个2.5(不知道这是否与您的问题相关)。但这应该会给你一个良好的开端。

答案 2 :(得分:0)

如果您不想直接生成2.5值的矩阵,可以手动替换0值:

srng = RandomStreams()    
A = srng.binomial(X.shape, p=0.8)
A[A == 0]=2.5

答案 3 :(得分:0)

您可以使用NumPy执行此操作:

import numpy as np

x = np.zeros((3, 4))
a = np.random.binomial(1, p=0.8, size=x.shape).astype(float)
a[a==0] = 2.5

现在a看起来像这样:

array([[ 1. ,  1. ,  2.5,  1. ],
       [ 1. ,  1. ,  1. ,  2.5],
       [ 1. ,  1. ,  2.5,  1. ]])

该行:

a[a==0] = 2.5

将所有0替换为2.5