根据条件专门更改 numpy 数组中的所有元素,而不遍历每个元素

Specifically change all elements in a numpy array based on a condition without iterating over each element

你好我想根据第二个布尔数组(test_map)同时更改此数组(测试)中的所有值 没有迭代每个项目.

test = np.array([1,1,1,1,1,1,1,1])
test_map = np.array([True,False,False,False,False,False,False,True])
test[test_map] = random.randint(0,1)

输出:

array([0, 1, 1, 1, 1, 1, 1, 0])  or  array([1, 1, 1, 1, 1, 1, 1, 1])

这个问题是我希望将应该更改的值(在本例中为第一个和最后一个值)随机更改为 0 或 1。因此 4 个可能的输出应该是:

array([0, 1, 1, 1, 1, 1, 1, 0])  or  array([1, 1, 1, 1, 1, 1, 1, 1])  or  array([1, 1, 1, 1, 1, 1, 1, 0])  or  array([0, 1, 1, 1, 1, 1, 1, 1])

一个可能的解决方案是生成一个随机的“位”数组,np.random.randint:

import numpy as np

test = np.array([1,1,1,1,1,1,1,1])
test_map = np.array([True,False,False,False,False,False,False,True])
# array of random 1/0 of the same length as test
r = np.random.randint(0, 2, len(test))
test[test_map] = r[test_map]
test

您可以通过将 test_map 中的 True 值的数量作为 size 参数传递给 np.random.randint() 来生成任意数量的随机整数:

test[test_map] = np.random.randint(0, 2, size=np.sum(test_map))