所以,它的另一个多维数组的问题:我希望能够给每个值与邻国的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 ,:]还是我理解这完全错了吗? 而有没有办法告诉切片停在结束了吗? 或者会有把事情在一个完全其他方式工作的另一种思路? 蒙面阵列? 电贺乔尼
就像是:
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)
这也可能是有用的,这将每个元素进行比较,以下面的元件,沿轴线= 1。 可以很明显的调整轴或距离。 关键是要确保在两侧==
操作符具有相同的形状。
a[:, :-1, :] == a[:, 1:, :]
如何只:
np.diff(a) != 0
?
如果您需要在另一个轴的邻居,也许diff的np.swapaxes(一)的结果,结果不知何故一起合并?