如何在 python 中随机化矩阵中的所有项目

How to randomize all the items in a matrix in python

我正在尝试创建一个接受矩阵并使用 python 为所述矩阵的每个项目分配随机变量的函数。

这看起来很简单,但我似乎无法让它工作。我做过的最接近的两次尝试是:

def MatrixRandomize(v):
    for rows in v:
        for columns in rows:
            columns = random.random()

def MatrixRandomize(v):
    for rows in v:
        for columns in rows:
            rows[columns] = random.random()

对于最初全为 0 的 3*3 矩阵,第一个函数给出了这个:

[[0, 0, 0], [0, 0, 0], [0, 0, 0]]

第二个给我这个:

[[0.5405554380526916, 0, 0], [0.1376271091010769, 0, 0], [0.5223432054353907, 0, 0]]

根据我的理解,我认为第二个功能应该有效。我已经看到有其他方法可以解决这个问题,比如使用 numpy,但我不明白这不起作用背后的逻辑。

谁能找出我代码中的错误?

这不是 Python 的工作方式。当你写

for columns in rows:

然后,在每次迭代中,名称 columnsnamespace 中绑定到一个对象。如果在正文中写

    columns = random.random()

然后它只是将它绑定到另一个对象 - 它不会改变原始矩阵中的任何内容。


为了实际更改矩阵的值,您需要更改其实际值。您没有指定您使用的是哪个矩阵库,但大概与此类似的东西会起作用:

for i in range(len(v.num_rows)):
    for j in range(len(v.num_cols)):
        v[i][j] = random.random()

如果您使用的是 numpy,请参阅 numpy.random 模块以获得更有效的替代方案:

import numpy as np

def MatrixRandomize(v):
    np.copyto(v, np.random.random(v.shape))

v = np.zeros((2, 3))
MatrixRandomize(v)
>>> v
array([[ 0.19700515,  0.82674963,  0.04401973],
     [ 0.03512609,  0.1849178 ,  0.40644165]])

终于明白哪里不对了

我考虑的正确方法是:

def MatrixRandomize(v):
    for rows in v:
        for columns in range(len(rows)):
            rows[columns] = random.random()

但现在我明白了我逻辑中缺失的link。谢谢!