我有两个数组:
x=np.array([0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1])
y=np.array([y0,y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11,y12])
元素y_i仅对应于数组x中的0元素。
我想修改x中的一个随机0元素并使其成为1.此时,我必须删除y中的相应元素(因为y仅包含与数组x中的0相关的元素)。
[编辑:]例如,我有
x=np.array([0,0,0,0,0,1,1,0,0,1,0]
y=np.array([21,32,45,54,87,90,88,60])
使得x [0]对应y [0] = 21,x [1] - > y [1] = 32,x [2] - > y [2] = 45,x [3] - > y [3] = 54,x [4] - > y [4] = 87,x [7] - > y [5] = 90,x [8] - > y [6] = 88,x [10] - > Y [7] = 60。如果我将x [2],x [7]和x [10]从0更改为1,我想取消y中的相应元素,即45,90和60
答案 0 :(得分:1)
这可能是您正在寻找的:
x_0 = np.where(x==0)[0]
rand_ind = np.random.randint(1,len(x_0))
x[x_0[rand_ind]] = 1;
y = np.delete(y, rand_ind)
x_0
是x
中最初等于0的元素数组。rand_ind
是从x_0
长度范围中选择的随机索引。要将0更改为1,程序会使用x_0[rand_ind]
,而要删除y中的相应元素,只需使用rand_ind
。
这是针对更新问题的修改解决方案
import numpy as np
import random
x_0 = np.where(x==0)[0]
rand_ind = np.array(random.sample(list(x_0), 3))
x[rand_ind] = 1
y = np.delete(y, [np.where(x_0==i)[0] for i in rand_ind])
在这个解决方案中,rand_ind是x数组的索引的直接选择,而不是修剪的x_0数组。它选择存储在x_0中的索引以避免选择x中的值为1的索引。索引,即x_0的元素是x的索引,而x_0的索引对应于y中的索引/位置。
程序使用random.sample
作为随机选择N个元素而不重复的简单方法(此处为3)。然后,它将x中的rand_ind
处的元素转换为1,并删除y中的相应元素。最后一步是通过使用生成器并使用每个rand_ind值查找x_0元素的索引来完成的。