改变数组元素
change elementes of array
我有一个数组,我已将其保存在 MC 变量中:
with open(PATH_FICHERO1, newline='', encoding='latin-1') as csvfile:
data = list(csv.reader(csvfile))
MC=numpy.array([numpy.array(datai) for datai in data])
type(MC)
print(MC)
在有字母 B 的情况下,我想更改介于 1/3 和 1 之间的随机值的值。应用以下代码不会给我错误,但是在查看随机矩阵时值始终相同。
B= np.random.uniform(1/3,2/3)
MC = np.where( MC == 'B',B , MC)
print(B)
print(MC)
值应该相同,在 B 的情况下它是随机生成的,但我不知道为什么它没有应用于矩阵。
默认情况下,np.random.uniform
生成一个随机变量。如果你想要一个随机变量数组,你必须传递输出数组的形状:
B = np.random.uniform(1/3, 2/3, MC.shape)
看起来问题出在代码中。
B= np.random.uniform(1/3,2/3)
MC = np.where( MC == 'B',B , MC)
在上面,您已将随机值分配给变量 B,然后将相同的值映射到矩阵中的每个元素。
例如如果随机值是 0.55 分配给 变量 B 那么相同的值将被映射到矩阵中的每个字符,这就是为什么你到处看到相同的值。
解决方案:-
import numpy as np
MC = [['1', 'B','B','B','B'],['B', '1','B','B','B'],['B', 'B','1','B','B'],['B', 'B','B','1','B'],['B', 'B','B','B','1']]
for i in range(len(MC)):
for j in range(len(MC[i])):
if MC[i][j]== "B":
MC[i][j]=str(np.random.uniform(1/3,2/3))
结果:
[['1',
'0.4133872881475391',
'0.388606739011768',
'0.632669589057151',
'0.555652072409681'],
['0.5964448593391674',
'1',
'0.5916592530420399',
'0.6004173979328635',
'0.45989982907152327'],
['0.49491629056763076',
'0.5814889531351302',
'1',
'0.42177756298000196',
'0.44166060842279004'],
['0.43908913157941704',
'0.5630605854105761',
'0.5867510079174598',
'1',
'0.5518789342365693'],
['0.6008453194037271',
'0.5921925074432766',
'0.344618130286966',
'0.5767303673801853',
'1']]
我有一个数组,我已将其保存在 MC 变量中:
with open(PATH_FICHERO1, newline='', encoding='latin-1') as csvfile:
data = list(csv.reader(csvfile))
MC=numpy.array([numpy.array(datai) for datai in data])
type(MC)
print(MC)
在有字母 B 的情况下,我想更改介于 1/3 和 1 之间的随机值的值。应用以下代码不会给我错误,但是在查看随机矩阵时值始终相同。
B= np.random.uniform(1/3,2/3)
MC = np.where( MC == 'B',B , MC)
print(B)
print(MC)
值应该相同,在 B 的情况下它是随机生成的,但我不知道为什么它没有应用于矩阵。
默认情况下,np.random.uniform
生成一个随机变量。如果你想要一个随机变量数组,你必须传递输出数组的形状:
B = np.random.uniform(1/3, 2/3, MC.shape)
看起来问题出在代码中。
B= np.random.uniform(1/3,2/3)
MC = np.where( MC == 'B',B , MC)
在上面,您已将随机值分配给变量 B,然后将相同的值映射到矩阵中的每个元素。 例如如果随机值是 0.55 分配给 变量 B 那么相同的值将被映射到矩阵中的每个字符,这就是为什么你到处看到相同的值。
解决方案:-
import numpy as np
MC = [['1', 'B','B','B','B'],['B', '1','B','B','B'],['B', 'B','1','B','B'],['B', 'B','B','1','B'],['B', 'B','B','B','1']]
for i in range(len(MC)):
for j in range(len(MC[i])):
if MC[i][j]== "B":
MC[i][j]=str(np.random.uniform(1/3,2/3))
结果:
[['1', '0.4133872881475391', '0.388606739011768', '0.632669589057151', '0.555652072409681'], ['0.5964448593391674', '1', '0.5916592530420399', '0.6004173979328635', '0.45989982907152327'], ['0.49491629056763076', '0.5814889531351302', '1', '0.42177756298000196', '0.44166060842279004'], ['0.43908913157941704', '0.5630605854105761', '0.5867510079174598', '1', '0.5518789342365693'], ['0.6008453194037271', '0.5921925074432766', '0.344618130286966', '0.5767303673801853', '1']]