在Python中使用随机函数时每次获取零
我这样做如下所示。最初我有一个2D数组a=[(1,2,3),(4,5,6)]。现在通过函数func,我想用随机数替换数组a两行中的所有元素。我正在尝试,但在执行函数后,我将每个元素都设置为0。有人能帮忙吗。记住,我必须通过使用这个函数func和执行这些切片操作来解决这个问题在Python中使用随机函数时每次获取零,python,Python,我这样做如下所示。最初我有一个2D数组a=[(1,2,3),(4,5,6)]。现在通过函数func,我想用随机数替换数组a两行中的所有元素。我正在尝试,但在执行函数后,我将每个元素都设置为0。有人能帮忙吗。记住,我必须通过使用这个函数func和执行这些切片操作来解决这个问题 import numpy as np import random A=np.array([(1,2,3),(4,5,6)]) def func(B): B[0:3]= np.random.random((1,3))
import numpy as np
import random
A=np.array([(1,2,3),(4,5,6)])
def func(B):
B[0:3]= np.random.random((1,3))
return(B)
for ic in range(0,2):
A[ic,:]= func(A[ic,:])
print(A)
构建数组
A
的方式是,它将始终具有整数。您可以使用print(A.dtype)
进行检查。这意味着0-1之间的值将转换为零,这是一个问题,因为np.random.rand
仅返回0到1之间的值。您可以通过以下几种方式解决此问题:
A=np.数组([(1,2,3.),(4,5,6.))
A=np.array([(1,2,3)、(4,5,6)],dtype=np.float)
A=np.array([(1,2,3)、(4,5,6)]).astype(np.float)
问题在于
A
是一个整数数组,而np.random.random
生成的浮点数实际上小于一。将这样的数字转换为整数总是得到零
您可以通过以下两种方式之一进行修复:
A
成为float
d类型的数组:
aA=np.array([[1.0,2,3],[4,5,6]])
b
A=np.array([[1,2,3],[4,5,6]],dtype=float)
C等等
B[:]=np.random.randint(256,size=B.shape)
b<代码>B[:]=np.random.random(B.shape)*256 C等等
您的代码只需稍加修改
import numpy as np
from random import random
A=np.array([(1,2,3),(4,5,6)])
def func(B):
B[0:3]= np.random.choice((1,3))
return(B)
for ic in range(0,2):
A[ic,:]= func(A[ic,:])
print(A)
您可以使用np.random.choice代替np.random.random,它将生成随机数
A
的dtype
是int64
,因此它只能保存整数值np.random.random((1,3))
生成3个浮点数,所有浮点数都小于1,因为它的大小是(1,3)
。所以,所有的浮点值都被截断为零,因为整数不能保持0到1之间的值。你的意思是说,我(在手机上)写我的东西的时候,你没有看到你发布了几乎完全相同的东西。干得好!我这么做太久了:)我删除了我的答案,因为你的答案信息量大得多。谢谢你的提醒!非常感谢非常感谢
import numpy as np
from random import random
A=np.array([(1,2,3),(4,5,6)])
def func(B):
B[0:3]= np.random.choice((1,3))
return(B)
for ic in range(0,2):
A[ic,:]= func(A[ic,:])
print(A)