提取数组的子数组

2024-10-01 00:14:56 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我的问题是关于J.F.塞巴斯蒂安守则和下面的讨论。 我正在尝试打印数组的子数组。代码在下面,我的更新在下面。(它给出错误消息)creating a spiral array in python?

我想根据这个数组中选择的条目创建一个子数组。如果我们选择04条目

subarray[x][y] == 04
subarray[x][y] == TheSpiral[x-1:x+2,y-1:y+2]

print_matrix(TheSpiral)  
print_matrix(subarray)

但是我得到一个错误消息,因为没有正确定义子阵列。我期待着打印矩阵(子阵列)产生

^{pr2}$

这就是为什么我用螺旋[x-1:x+2,y-1:y+2]。谢谢你的帮助。在


Tags: 代码increating消息定义错误条目数组
2条回答

问题是第二部分并没有像你想象的那样

  • 这是标准列表的语法错误,您应该使用[][],但是。。。在
  • 第二个索引不是对单个子数组进行切片,切片返回第二个切片也将对其进行操作的列表列表

您可以通过列表理解来修复它:

>>> i, j = 3, 2
>>> subarray = [row[j-1:j+2] for row in TheSpiral[i-1:i+2]]
>>> print_matrix(subarray)
06 01 02
05 04 03
16 15 14

或者,您可以使用numpy(这可能有点过头了!!!)并使用原始语法:

^{pr2}$

要计算缓和曲线坐标:

def spiral_coord(n):
    k = int((n**0.5) // 2)
    t = 2*k
    m = (t+1)**2
    for fn in (lambda: (-k, k-(m-n)), lambda: (-k+(m-n), -k), lambda: (k, -k+(m-n))):
        if n >= m-t:
            return fn()
        m -= t
    return k-(m-n-t), k

>>> mid = (5-1)//2
>>> i, j = map(lambda x: x+mid, spiral_coord(9))
>>> subarray = np.array(TheSpiral)[i-1:i+2,j-1:j+2]
>>> print_matrix(subarray)
23 24 25
08 09 10
01 02 11

我相信你的子数组代码有语法错误。由于方法“spiral”返回一个2D数组(在您的例子中是spiral),访问2D数组元素的方法必须是

TheSpiral[i][j]

不是

^{pr2}$

相关问题 更多 >