提问人:Patstro 提问时间:5/13/2023 更新时间:6/5/2023 访问量:52
您可以使用 Numpy Slice 在没有已知索引的情况下更改值吗?
Can you use Numpy Slice to Change values without known Index?
问:
我有一个包含数百个切片的 2D 数组。以下是其中一个切片的示例:
example_slice = [0, 0, 1, 2, 2, 2, 1, 0, 0]
我有兴趣更改切片中的 2,但不知道它们将永远是 2 或它们将始终位于同一索引位置。
我确实知道第一个和最后一个 2 将始终与 0 相隔某个值 - 在本例中为 1。
如果我不知道索引位置,有没有办法编写一个 np.slice 可以通过添加 2 将 1 更改为 3?
我在其他人的帮助下尝试的代码如下:
example_array = np.array(2D_Surface)
sub_array = example_array[:, 1:-1]
sub_array[sub_array > 1] += 1
但是,此尝试将 1 添加到列表中的每个值,从而将切片转换为:
incorrect_slice = [0, 0, 2, 3, 3, 3, 2, 0, 0]
而不是所需的切片
correct_slice = [0, 0, 1, 3, 3, 3, 1, 0, 0]
答:
1赞
Corralien
5/13/2023
#1
编辑:
@hpaulj评论:
where
在这里是可选的。
关键步骤是 example_slice == 2,它将所有数组元素测试为 2。结果是一个 true/false 数组。where 将其转换为索引数组
因此,您可以简单地使用:
example_slice[example_slice == 2] = 3
# OR
example_slice[example_slice == 2] += 1
您在寻找 np.where 吗:
example_slice = np.array([0, 0, 1, 2, 2, 2, 1, 0, 0])
example_slice[np.where(example_slice == 2)] = 3
输出:
>>> example_slice
array([0, 0, 1, 3, 3, 3, 1, 0, 0])
评论
0赞
hpaulj
5/13/2023
关键步骤是测试所有数组元素。结果是一个 true/false 数组。 将其转换为索引数组。我认为这里是可选的。example_slice == 2
2
where
where
example_slice[example_slice == 2] = 3
0赞
Corralien
5/13/2023
@hpaulj 你是完全正确的。很晚了,我没有想太多:p
0赞
Patstro
5/13/2023
这是有道理的!您对自动化该过程有任何建议,即使我不知道数字是 2,我仍然可以将 1 添加到这些位置的任何值中?
0赞
Corralien
5/13/2023
你是什么意思?
0赞
Carraway XU
6/5/2023
#2
对Corralien的一些补充。有一个简化/不同的版本
np.where() 中
example_slice = np.array([0, 0, 1, 2, 2, 2, 1, 0, 0])
np.where(example_slice==2,example_slice+1,example_slice)
# np.where(condition, if True yield example_slice+1, if False yield example_slice)
输出为
array([0, 0, 1, 3, 3, 3, 1, 0, 0])
上一个:向数组切片添加常量
评论
np.slice
slice