如何根据Python中的另一个数组修改删除数组中的元素

时间:2017-11-19 18:06:23

标签: python arrays numpy

我有两个数组:

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

1 个答案:

答案 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_0x中最初等于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元素的索引来完成的。