英文:
Can you use Numpy Slice to Change values without known Index?
问题
我有一个包含数百个切片的二维数组。以下是其中一个切片的示例:
example_slice = [0, 0, 1, 2, 2, 2, 1, 0, 0]
我希望能够更改切片中的2,但不确定它们是否始终为2,或它们是否始终位于相同的索引位置。
我知道第一个和最后一个2将始终与0之间以某个值分隔 - 例如,在这个示例中是1。
是否有办法编写一个np.slice
,以便能够通过添加1来将2更改为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]
英文:
I have a 2D array with hundreds slices. An example of one of those slices below:
example_slice = [0, 0, 1, 2, 2, 2, 1, 0, 0]
I am interested in changing the 2's in the slice but do not know that they will always be 2's or that they will always be in the same index location.
I do know that the first and last 2 will always be separated from the 0's by some value - a 1 in this example.
Is there a way to write a np.slice that will be able to change the 2's into 3's by adding 1, if I do not know the index location?
my code attempt with the help of others is below:
example_array = np.array(2D_Surface)
sub_array = example_array[:, 1:-1]
sub_array[sub_array > 1] += 1
but this attempt adds 1 to every value in the list turning the slice into:
incorrect_slice = [0, 0, 2, 3, 3, 3, 2, 0, 0]
instead of the desired slice
correct_slice = [0, 0, 1, 3, 3, 3, 1, 0, 0]
答案1
得分: 1
以下是翻译好的部分:
编辑:
来自 @hpaulj 的评论:
> 在这里 where
是可选的。
> 关键步骤是 example_slice == 2
,它测试所有数组元素是否等于 2。结果是一个包含 true/false 的数组。where
将其转换为索引数组。
因此,您可以简单地使用:
example_slice[example_slice == 2] = 3
# 或者
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])
英文:
EDIT:
Comment from @hpaulj:
> where
is optional here.
> The key step is example_slice == 2 which tests all array elements to 2. The result is an array of true/false. where converts that to index array(s)
So, you can simply use:
example_slice[example_slice == 2] = 3
# OR
example_slice[example_slice == 2] += 1
Are you looking for np.where:
example_slice = np.array([0, 0, 1, 2, 2, 2, 1, 0, 0])
example_slice[np.where(example_slice == 2)] = 3
Output:
>>> example_slice
array([0, 0, 1, 3, 3, 3, 1, 0, 0])
答案2
得分: 0
以下是对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, 如果为True则返回example_slice+1,如果为False则返回example_slice)
输出是
array([0, 0, 1, 3, 3, 3, 1, 0, 0])
英文:
Some supplement to the Corralien. There is a simplified/different version of
> 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)
Output is
array([0, 0, 1, 3, 3, 3, 1, 0, 0])
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论