【发布时间】:2018-07-05 09:04:41
【问题描述】:
我有一个大的二维 numpy 数组,每个值都是 0 或 1。我想创建一个函数,将这个数组作为输入,并返回一个相同大小的新数组,其中每个元素都基于上面、下面和任一侧的元素。返回的数组应该有 0 保持 0,如果有一个 1 在北方,每个 1 将获得 +1,对于右侧的 1,+2,对于下方的 1,+4,对于左侧的 1,+8。这些都是堆叠的,因此被 1 包围的 1 最终应该是 17。对角线无关紧要。使用显式按位运算(4 位,每个位对应一个方向以及其中是否有 1 或 0),这也可能会更快。
我希望尽快完成此操作。我玩了一个 for 循环,但它太慢了,而且我对 numpy 中的掩码理解不够好,无法使用它。
【问题讨论】:
-
序言,这听起来像是一项任务。你能分享一下你的尝试吗?
-
听起来像是康威人生游戏的变种。这是一个简单的解释:stackoverflow.com/questions/47648106/…
-
你到底是怎么得到
17的?
标签: python arrays numpy masked-array