所以这是另一个n维数组问题: 我希望能够将n维数组中的每个值与其邻居进行比较。例如,如果a是我希望能够检查的二维数组:
a[y][x]==a[y+1][x]
所有元素。所以基本上检查所有维度的所有邻居。现在我通过以下方式做到:
for x in range(1,a.shape[0]-1):
do.something(a[x])
使用数组的形状,这样我就不会在边缘处遇到超出范围的索引。因此,如果我想在n-D中对数组中的所有元素执行类似的操作,我确实需要n个for循环,这似乎是不整齐的。有没有办法通过切片这样做?有点像== a [:, - 1,:]还是我理解这完全错了?有没有办法告诉切片最后停止?还是会有另一种想法让事情以另一种方式发挥作用?蒙面阵列? 迎接Joni
答案 0 :(得分:5)
类似的东西:
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 :(得分:2)
这可能也很有用,它会将每个元素与下一个元素进行比较,沿轴= 1。你可以明显地调整轴或距离。诀窍是确保==
运算符的两边具有相同的形状。
a[:, :-1, :] == a[:, 1:, :]
答案 2 :(得分:0)
如何:
np.diff(a) != 0
如果您需要另一个轴中的邻居,可能会将np.swapaxes(a)的结果区别开来并以某种方式将结果合并在一起?