&引用;“形状不匹配”;在python中使用numpy时出错

&引用;“形状不匹配”;在python中使用numpy时出错,python,numpy,Python,Numpy,我试图生成一个0和1的随机数组,但得到的错误是:形状不匹配:对象不能广播到单个形状。错误似乎发生在行randints=np.random.binomian(1,p,(n,n))中。以下是函数: import numpy as np def rand(n,p): '''Generates a random array subject to parameters p and N.''' # Create an array using a random binomial with

我试图生成一个0和1的随机数组,但得到的错误是:形状不匹配:对象不能广播到单个形状。错误似乎发生在行
randints=np.random.binomian(1,p,(n,n))
中。以下是函数:

import numpy as np

def rand(n,p):
    '''Generates a random array subject to parameters p and N.'''

    # Create an array using a random binomial with one trial and specified
    # parameters.
    randints = np.random.binomial(1,p,(n,n))

    # Use nested while loops to go through each element of the array
    # and assign True to 1 and False to 0.
    i = 0
    j = 0
    rand = np.empty(shape = (n,n),dtype = bool)
    while i < n:
        while j < n:
            if randints[i][j] == 0:
                rand[i][j] = False
            if randints[i][j] == 1:
                rand[i][j] = True
            j = j+1
        i = i +1
        j = 0

    # Return the new array.
    return rand

print rand
将numpy导入为np
定义兰德(n,p):
''根据参数p和N生成一个随机数组''
#使用随机二项式创建一个数组,进行一次试验并指定
#参数。
随机二项(1,p,(n,n))
#使用嵌套的while循环遍历数组的每个元素
#并将True指定给1,将False指定给0。
i=0
j=0
rand=np.empty(shape=(n,n),dtype=bool)
而i

当我自己运行它时,它返回
。这是什么意思?我应该如何将其转换为可以在其他函数中使用的数组?

您不必经历所有这些

 randints = np.random.binomial(1,p,(n,n))
生成
0
1
值的数组

 rand_true_false = randints == 1

将生成另一个数组,只需将
1
s替换为
True
,将
0
s替换为
False

显然,@danodonovan的答案是最具python风格的,但是如果您真的想要与循环代码更相似的东西的话。下面是一个更简单地修复名称冲突和循环的示例

import numpy as np

def my_rand(n,p):
    '''Generates a random array subject to parameters p and N.'''

    # Create an array using a random binomial with one trial and specified
    # parameters.

    randInts = np.random.binomial(1,p,(n,n))

    # Use nested while loops to go through each element of the array
    # and assign True to 1 and False to 0.

    randBool = np.empty(shape = (n,n),dtype = bool)
    for i in range(n):
        for j in range(n):
             if randInts[i][j] == 0:
                randBool[i][j] = False
             else:
                randBool[i][j] = True

    return randBool


newRand = my_rand(5,0.3)
print(newRand)

您正在运行哪些版本的python和numpy?上面发布的代码只在
i=i+1
中有误齿。运行此程序时打印
的原因是因为您的行
print rand
正在打印函数对象。您需要调用该函数。尝试:
print rand(4,2)
。另一种转换为真/假的方法是
randints.astype(bool)
小元注释:当添加其他答案时,说“上面的答案”可能并不总是正确的。最好参考海报上的答案,即“danodonovan的答案”。此外,您的return语句似乎应该缩进函数中。