NumPy的/ Python的:数组迭代,而不对环(Numpy/Python: Array iter

2019-07-04 20:57发布

所以,它的另一个多维数组的问题:我希望能够给每个值与邻国的n维数组进行比较。 例如,如果A是2维我希望能够检查数组:

a[y][x]==a[y+1][x]

所有元素。 所以基本上检查所有邻居中的所有方面。 现在,我通过这样做:

for x in range(1,a.shape[0]-1):
   do.something(a[x])

阵列的形状使用,所以,我不在边缘处遇到的索引超出范围。 所以,如果我想要做这样的事情在第二数组中的所有元素,确实需要换循环n这似乎是凌乱。 有没有办法通过切片这样做呢? 有点像一个== [: - 1 ,:]还是我理解这完全错了吗? 而有没有办法告诉切片停在结束了吗? 或者会有把事情在一个完全其他方式工作的另一种思路? 蒙面阵列? 电贺乔尼

Answer 1:

就像是:

a = np.array([1,2,3,4,4,5])
a == np.roll(a,1)

返回

array([False, False, False, False,  True, False], dtype=bool

你也能指定一个轴的高维,但正如其他人所说,你需要以某种方式处理边缘的值环绕(你可以从名字猜测)

对于2D更完整的示例:

# generate 2d data
a = np.array((np.random.rand(5,5)) * 10, dtype=np.uint8)

# check all neighbours
for ax in range(len(a.shape)):
    for i in [-1,1]:
        print a == np.roll(a, i, axis=ax)


Answer 2:

这也可能是有用的,这将每个元素进行比较,以下面的元件,沿轴线= 1。 可以很明显的调整轴或距离。 关键是要确保在两侧==操作符具有相同的形状。

a[:, :-1, :] == a[:, 1:, :]


Answer 3:

如何只:

np.diff(a) != 0

如果您需要在另一个轴的邻居,也许diff的np.swapaxes(一)的结果,结果不知何故一起合并?



文章来源: Numpy/Python: Array iteration without for-loop