改变数组元素

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']]