提问人:Patstro 提问时间:5/12/2023 更新时间:5/12/2023 访问量:71
你能用开始和停止规则切片一个numpy 2D数组,而不是在索引处,而是在大于1的值上吗?
Can you slice a numpy 2D array with start and stop rules not at an index but at values greater than 1?
问:
我已通过以下代码将 geotiff LiDAR 高程表面转换为 numpy 数组:
example_array = np.array(geotiff_surface)
该数组由数百个值乘以数百个值组成,但可以简化为下面的示例:
example_array = [[ 0, 0, 0, 1, 1, 0, 0, 0]
[ 0, 0, 2, 2, 2, 2, 0, 0]
[ 0, 3, 3, 3, 3, 0, 0, 0]
[ 4, 4, 4, 4, 4, 4, 0, 0]
[ 0, 0, 0, 5, 5, 0, 0, 0]]
在其他人的帮助下,我正在尝试使用以下代码对 2D 数组进行切片,以将特定位置的值增加 1000:
sub_array = example_array[1:-1, 1:-1]
sub_array = [sub_array > 1] += 1000
希望得到下面正确的示例数组:
correct_example_array = [[ 0, 0, 0, 1, 1, 0, 0, 0]
[ 0, 0, 2, 1002, 1002, 2, 0, 0]
[ 0, 3, 1003, 1003, 3, 0, 0, 0]
[ 4, 1004, 1004, 1004, 1004, 4, 0, 0]
[ 0, 0, 0, 5, 5, 0, 0, 0]]
实际上,我当前的代码给我的是这个数组:
incorrect_example_array = [[ 0, 0, 0, 1, 1, 0, 0, 0]
[ 0, 0, 1002, 1002, 1002, 1002, 0, 0]
[ 0, 1003, 1003, 1003, 1003, 0, 0, 0]
[ 4, 1004, 1004, 1004, 1004, 1004, 0, 0]
[ 0, 0, 0, 5, 5, 0, 0, 0]]
有没有办法让切片理解跳过列表中的零并开始在大于 1 的值内切片 [1:-1]?
答:
0赞
Shaig Hamzaliyev
5/12/2023
#1
这是一种方法(可能不是很好):
for i in range(example_array.shape[0]):
if len(np.where(example_array[i]!=0)[0][1:-1])>0:
example_array[i][np.where(example_array[i]!=0)[0][1:-1]] = example_array[i][example_array[i]!=0][1:-1]+1000
print(example_array)
评论
np.where()
... = [...] += ..,
sub_array
example
sub_array > 1
sub_array[sub_array > 1] += 1000
example