2

我正在尝试创建一个接受矩阵并使用 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,但我无法理解这不起作用背后的逻辑。

任何人都可以在我的代码中发现错误吗?

4

2 回答 2

0

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

for columns in rows:

然后,在每次迭代中,名称在命名空间columns中绑定到对象。如果你写在正文中

    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]])
于 2016-02-21T22:45:01.890 回答
0

我终于明白出了什么问题。

我想这样做的正确方法是:

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

但现在我明白了我的逻辑中缺少的环节。谢谢!

于 2016-02-21T22:45:47.387 回答