我遇到了这个问题:创建一个没有numpy的随机矩阵
我搜索了一下这个词,但没有找到。每次我搜索一个随机数时,你都必须重新设定种子吗?我的解决办法是:
import random
def matrix_random_number(n_filas, n_columnas, num_decimals=2):
blank = [0]
row = blank*n_filas
array = [row]*n_columnas
for j in range(n_columnas):
for i in range(n_filas):
array[j][i] = random.randint(0,100*10**num_decimals)/10**num_decimals
return array
但我的产出是:
[[80.91, 47.46, 15.86, 77.16, 92.47, 54.92, 2.76, 97.42, 14.99, 15.97],
[80.91, 47.46, 15.86, 77.16, 92.47, 54.92, 2.76, 97.42, 14.99, 15.97],
[80.91, 47.46, 15.86, 77.16, 92.47, 54.92, 2.76, 97.42, 14.99, 15.97],
[80.91, 47.46, 15.86, 77.16, 92.47, 54.92, 2.76, 97.42, 14.99, 15.97],
[80.91, 47.46, 15.86, 77.16, 92.47, 54.92, 2.76, 97.42, 14.99, 15.97],
[80.91, 47.46, 15.86, 77.16, 92.47, 54.92, 2.76, 97.42, 14.99, 15.97],
[80.91, 47.46, 15.86, 77.16, 92.47, 54.92, 2.76, 97.42, 14.99, 15.97]]
所以这显然不是随机的。如何改进?为什么这是坏代码?提前谢谢
您使用了
array = [row]*n_columnas
。这使得array
中的每个术语都是相同的对象,row
。因此,行中的所有项目都是相同的。您可以创建一个空的array
并每次添加一个list
对象。例如:我会给你想要的答案
这个问题与设置随机数生成器种子无关,因为您正在创建一个矩阵,该矩阵引用同一行列表
n_columnas
次。 通过使用list comprehension初始创建空矩阵,可以轻松解决此问题:样本输出:
正如其他人所指出的,您的问题是制作同一行对象的
n
个副本。我建议用嵌套列表来解决这个问题。这样就不需要临时变量、生成矩阵的多次传递或追加。这可能是一个1行,但这将是一个非常长的行,因此我为随机数生成创建了一个lambda,并将其分为两行:样本输出:
没有必要重新播种,事实上这样做会适得其反
相关问题 更多 >
编程相关推荐