提取数组的子数组

时间:2016-11-20 00:49:52

标签: python arrays

您好我的问题是关于下面的J.F. Sebastian代码和讨论。 我正在尝试打印数组的子数组。代码如下,我的更新位于底部。 (它提供错误消息)creating a spiral array in python?

我想基于此数组中的选定条目创建子数组。如果我们选择04条目,

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />

<form class="form-inline">
  <div class="row">

    <div class="col-xs-6 form-group">
      <label>Label 1</label>
      <input class="form-control" type="text" />
    </div>
    <div class="col-xs-6 form-group">
      <label>Label 2</label>
      <input class="form-control" type="text" />
    </div>

  </div>
</form>

但是由于没有正确定义子数组,我收到错误消息。我期待print_matrix(子阵列)产生

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

print_matrix(TheSpiral)  
print_matrix(subarray)

这就是我使用#TheSpiral [x-1:x + 2,y-1:y + 2]的原因。谢谢你的帮助。

2 个答案:

答案 0 :(得分: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(这可能是矫枉过正!!!)并使用你的原始语法:

>>> import numpy as np
>>> subarray = np.array(TheSpiral)[i-1:i+2,j-1:j+2]
>>> print_matrix(subarray)
06 01 02
05 04 03
16 15 14

计算螺旋坐标:

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

答案 1 :(得分:1)

我相信您的子数组代码中存在语法错误。作为方法&#34;螺旋&#34;返回一个二维数组(在你的情况下是TheSpiral),访问二维数组元素的方式必须是

TheSpiral[i][j]

TheSpiral[i,j]
相关问题