如何在 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:
然后,在每次迭代中,名称 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]])
终于明白哪里不对了
我考虑的正确方法是:
def MatrixRandomize(v):
for rows in v:
for columns in range(len(rows)):
rows[columns] = random.random()
但现在我明白了我逻辑中缺失的link。谢谢!
我正在尝试创建一个接受矩阵并使用 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:
然后,在每次迭代中,名称 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]])
终于明白哪里不对了
我考虑的正确方法是:
def MatrixRandomize(v):
for rows in v:
for columns in range(len(rows)):
rows[columns] = random.random()
但现在我明白了我逻辑中缺失的link。谢谢!