对于我的编码:
In[1]:
TC = [[0, 0, 0, 0, 0, 2000, 2000, 2000, 2000, 0, 0, 0],
[0, 1000, 1000, 1000, 1000, 0, 0, 0, 0, 0, 0, 0]]
a = np.array(TC)
arr = a.reshape(2,12)
arr
Out[1]:
array([[ 0, 0, 0, 0, 0, 2000, 2000, 2000, 2000, 0, 0,
0],
[ 0, 1000, 1000, 1000, 1000, 0, 0, 0, 0, 0, 0,
0]])
In[2]:
array_new=[]
for i in range (2):
for j in range (12):
rand=np.random.choice([0,1])
y = np.select([arr[i][j] > 0], [rand], 999)
array_new.append(y)
j=j+1
i=i+1
numpy_array = np.array(array_new)
array_new = numpy_array.reshape(2,12)
array_new
Out[2]:
array([[999, 999, 999, 999, 999, 0, 1, 0, 1, 999, 999, 999],
[999, 1, 1, 1, 1, 999, 999, 999, 999, 999, 999, 999]])
字符串
有没有什么方法可以使TC数组中每一行中大于零的值(如2000 1000)成为 * 随机值,由三个0和一个1组成,然后每行替换它?
Target
Out[2]:
array([[999, 999, 999, 999, 999, *0, *0, *0, *1, 999, 999, 999],
[999, *1, *0, *0, *0, 999, 999, 999, 999, 999, 999, 999]])
型
提前感谢
2条答案
按热度按时间nr7wwzry1#
给定一个数组:
字符串
看起来你想用三个0和一个1随机替换每行中的四个值。为此,您首先需要选择要替换的四个值:
型
这将创建两个与
arr
形状相同的布尔数组,其中条件为true时为True
,条件为false时为False
现在,由于您知道每行都保证有四个非零值,因此可以预先构建一个
Nx4
替换值数组。首先,创建一个零数组。然后,为每行选择一个随机列插入1
。然后,使用np.put_along_axis
将该列中的元素替换为1
型
在这段代码的结尾,
replacements
看起来像这样:型
最后,将
arr
中的元素替换为replacements
。请注意,您需要将replacements
扁平化,以便能够使用布尔索引设置值:型
这给了你以下(示例)
arr
:型
5anewei62#
一个选择:
字符串
示例输出:
型