根据条件特别更改numpy数组中的所有元素,而无需在每个元素上迭代

发布于 2025-01-21 06:55:46 字数 577 浏览 0 评论 0原文

嗨,我想根据第二个布尔数组(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])

Hi I would like to change all the values in this array (test) simultaneously based on a second boolean array (test_map) without iterating over each item.

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)

output:

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

The problem with this is that I want the values that should be changed (in this case the first and last value) to each randomly be changed to a 0 or 1. So the 4 possible outputs should be:

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])

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

山田美奈子 2025-01-28 06:55:46

一种可能的解决方案是用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

One possible solution is to generate a random array of "bits", with 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
反目相谮 2025-01-28 06:55:46

您可以通过传递true值的数量test_map作为size> size参数到np,可以生成所需的随机整数。 .random.randint()

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

You can generate just as many random integers as you need by passing the number of True values in test_map as the size argument to np.random.randint():

test[test_map] = np.random.randint(0, 2, size=np.sum(test_map))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文