我正在尝试创建一个接受矩阵的函数,并使用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,但我无法理解这背后的逻辑不起作用。
有人能在我的代码中发现错误吗?。
答案 0 :(得分:0)
这不是Python的工作原理。当你写
for columns in rows:
然后,在每次迭代中,名称columns
被绑定在namespace对象中。如果你写在身体
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]])
答案 1 :(得分:0)
我终于明白了什么是错的。
我想做的正确方法是:
def MatrixRandomize(v):
for rows in v:
for columns in range(len(rows)):
rows[columns] = random.random()
但是现在我理解了逻辑中缺失的链接。谢谢!