6

我正在尝试访问 numpy ndarray 的角值。对于方法论,我完全被难住了。任何帮助将不胜感激。

例如,从下面的数组中,我想要数组([1,0,0,5])或数组([[1,0],[0,5]])的返回值。

array([[ 1.,  0.,  0.,  0.],
       [ 0.,  1.,  0.,  0.],
       [ 0.,  0.,  1.,  5.],
       [ 0.,  0.,  5.,  5.]])
4

4 回答 4

8

为了增加答案的多样性,您可以获得角落项目的视图(而不是副本):

corners = a[::a.shape[0]-1, ::a.shape[1]-1]

或者,对于一个通用的 n 维数组:

corners = a[tuple(slice(None, None, j-1) for j in a.shape)]

这样做,您可以通过修改视图来修改原始数组:

>>> a = np.arange(9).reshape(3, 3)
>>> a
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> corners = a[tuple(slice(None, None, j-1) for j in a.shape)]
>>> corners
array([[0, 2],
       [6, 8]])
>>> corners += 1
>>> a
array([[1, 1, 3],
       [3, 4, 5],
       [7, 7, 9]])

编辑啊,你想要一个角值的平面列表......这通常无法通过视图来实现,所以@IanH 的答案就是你正在寻找的。

于 2013-07-30T03:38:20.017 回答
6

怎么样

A[[0,0,-1,-1],[0,-1,0,-1]]

A数组在哪里。

于 2013-07-30T03:19:15.780 回答
2

使用np.ix_构造索引。

>>> a
array([[1., 0., 0., 0.],
       [0., 1., 0., 0.],
       [0., 0., 1., 5.],
       [0., 0., 5., 5.]])

>>> corners = np.ix_((0,-1),(0,-1))

>>> a[corners]
array([[1., 0.],
      [0., 5.]])
于 2018-03-02T00:46:06.683 回答
0

您可以手动指定角点(使用负索引):

a = numpy.array([[ 1.,  0.,  0.,  0.],
  [ 0.,  1.,  0.,  0.],
  [ 0.,  0.,  1.,  5.],
  [ 0.,  0.,  5.,  5.]])

result = numpy.array([a[0][0],a[0][-1],a[-1][0],a[-1][-1]])
# result will contain array([ 1.,  0.,  0.,  5.])

result = numpy.array([a[0][0],a[0][-1],a[-1][0],a[-1][-1]])
# result will contain array([[ 1.,  0.],
#                            [ 0.,  5.]])
于 2013-07-30T03:17:13.310 回答