假设我有一个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阵列 - 如果它是偶数,我想要中心的四个元素,如上所述。
答案 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]