&引用;“形状不匹配”;在python中使用numpy时出错
我试图生成一个0和1的随机数组,但得到的错误是:形状不匹配:对象不能广播到单个形状。错误似乎发生在行&引用;“形状不匹配”;在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
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语句似乎应该缩进函数中。