首页 > 解决方案 > 如何在更大的数组中找到 numpy 数组形状?

问题描述

big_array = np.array((
  [0,1,0,0,1,0,0,1],
  [0,1,0,0,0,0,0,0],
  [0,1,0,0,1,0,0,0], 
  [0,0,0,0,1,0,0,0],
  [1,0,0,0,1,0,0,0]))

print(big_array)
[[0 1 0 0 1 0 0 1]
 [0 1 0 0 0 0 0 0]
 [0 1 0 0 1 0 0 0]
 [0 0 0 0 1 0 0 0]
 [1 0 0 0 1 0 0 0]]

有没有办法遍历这个 numpy 数组,并且对于每个 2x2 的 0 簇,设置该簇中的所有值 = 5?这就是输出的样子。

[[0 1 5 5 1 5 5 1]
 [0 1 5 5 0 5 5 0]
 [0 1 5 5 1 5 5 0]
 [0 0 5 5 1 5 5 0]
 [1 0 5 5 1 5 5 0]]

我的想法是使用高级索引将 2x2 形状 = 设置为 5,但我认为简单地迭代会很慢:1)检查 array[x][y] 是否为 0 2)检查相邻的数组元素是否0 3) 如果所有元素都是 0,则将所有这些值设置为 5。

标签: pythonnumpy

解决方案


big_array = [1, 7, 0, 0, 3]

i = 0
p = 0
while i <= len(big_array) - 1 and p <= len(big_array) - 2:
    if big_array[i] == big_array[p + 1]:
        big_array[i] = 5
        big_array[p + 1] = 5
        print(big_array)
    i = i + 1
    p = p + 1

输出:[1, 7, 5, 5, 3]

这是一个示例,而不是完整的正确代码。


推荐阅读