在Numpy数组中访问中间四个元素的最快方法?

时间:2016-03-30 20:12:46

标签: python arrays numpy

假设我有一个Numpy数组,例如

rand = np.random.randn(6, 6)

我需要数组中的四个中心值,因为它具有偶数长度的轴。如果它是奇数,例如5乘5,则只有一个中心值。检索这四个条目的最简单/最快/最简单的方法是什么?我可以用索引非常粗略地获得它们,但我正在寻找一种比调用一堆函数和执行一堆计算更快的方法。

例如,请考虑以下事项:

array([[ 0.25659355, -0.75456113,  0.39467396,  0.50805361],
       [-0.77218172,  1.00016061, -0.70389486,  1.67632146],
       [-0.41106158, -0.63757421,  1.70390504, -0.79073362],
       [-0.2016959 ,  0.55316318, -1.55280823,  0.45740193]])

我想要以下内容:

array([[1.00016061, -0.70389486],
       [-0.63757421,  1.70390504]])

但不仅仅是4乘4阵列 - 如果它是偶数,我想要中心的四个元素,如上所述。

4 个答案:

答案 0 :(得分:4)

这样的事情太复杂了吗?

document.domain

答案 1 :(得分:3)

您可以通过一次切片操作来完成此操作:

rand = np.random.randn(n,n)
# assuming n is even
center = rand[n/2-1:n/2+1, n/2-1:n/2+1]

我通过遗漏parens来滥用操作顺序,只是为了让它变得不那么混乱。

答案 2 :(得分:1)

给定数组a:

import numpy as np
a = np.array([[ 0.25659355, -0.75456113,  0.39467396,  0.50805361],
[-0.77218172,  1.00016061, -0.70389486,  1.67632146],
[-0.41106158, -0.63757421,  1.70390504, -0.79073362],
[-0.2016959 ,  0.55316318, -1.55280823,  0.45740193]])
     

获得中心4值的最简单方法是:

ax, ay = a.shape
a[int(ax/2)-1:int(ax/2)+1, int(ay/2)-1:int(ay/2)+1]

如果您对数组的维度使用偶数,则此方法有效。在奇数的情况下,不会成为中心4值。

答案 3 :(得分:0)

你可以只使用索引吗?喜欢:

A = np.array([[ 0.25659355, -0.75456113,  0.39467396,  0.50805361],
[-0.77218172,  1.00016061, -0.70389486,  1.67632146],
[-0.41106158, -0.63757421,  1.70390504, -0.79073362],
[-0.2016959 ,  0.55316318, -1.55280823,  0.45740193]])
])

A[1:3,1:3]

或者如果矩阵 A 有奇数维度,比如说 5x5,那么:

A[2,2]