在python中切片2D numpy数组

时间:2014-08-08 20:33:16

标签: python arrays numpy

下面的代码出了什么问题?

arr=numpy.empty((2,2))
arr[0:,0:]=1
print(arr[1:,1:])
arr=([ [1, 2, 3], [ 4, 5, 6], [ 7, 8, 9] ])
print(arr[1:2, 1])

我收到以下错误,无法切片数组(第五行)。请帮帮我。

TypeError:list indices必须是整数,而不是元组。

2 个答案:

答案 0 :(得分:1)

您在第四行重新绑定了名称arr以指向Python list,因此您的问题标题并不合适:您不会切换2d numpy阵列。 list不能像numpy数组一样切片。比较:

>>> arr= numpy.array([ [1, 2, 3], [ 4, 5, 6], [ 7, 8, 9] ])
>>> arr
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
>>> arr[1:2, 1]
array([5])

>>> arr.tolist()
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> arr.tolist()[1:2, 1]
Traceback (most recent call last):
  File "<ipython-input-23-4a441cf2eaa9>", line 1, in <module>
    arr.tolist()[1:2, 1]
TypeError: list indices must be integers, not tuple

答案 1 :(得分:1)

arr=([ [1, 2, 3], [ 4, 5, 6], [ 7, 8, 9] ])python list,而不是numpy array

您将arrarr=([ [1, 2, 3], [ 4, 5, 6], [ 7, 8, 9] ])重新分配到列表中。

使它成为一个numpy数组:

In [37]: arr  = numpy.array([ [1, 2, 3], [ 4, 5, 6], [ 7, 8, 9] ])

In [38]: arr
Out[38]: 
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

In [39]: (arr[1:2, 1])
Out[39]: array([5])