根据条件专门更改 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))
你好我想根据第二个布尔数组(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))