Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用numpy检查矩阵的每个部分是否都是0_Python_Numpy - Fatal编程技术网

Python 使用numpy检查矩阵的每个部分是否都是0

Python 使用numpy检查矩阵的每个部分是否都是0,python,numpy,Python,Numpy,我想检查给定项x,y的10个索引内的矩阵a的所有项是否都为零。我想这样的东西应该可以 (numpy.take(A,[x-10:x+10,y-10:y+10]) == 0).all() 但是我得到了一个无效的语法错误。我认为我没有构建索引范围,对吗,有什么建议吗 不用担心使用take,只需按如下方式为数组编制索引: (A[x-10:x+10,y-10:y+10] == 0).all() 不用担心使用take,只需按如下方式对数组进行索引: (A[x-10:x+10,y-10:y+10] ==

我想检查给定项x,y的10个索引内的矩阵a的所有项是否都为零。我想这样的东西应该可以

(numpy.take(A,[x-10:x+10,y-10:y+10]) == 0).all() 
但是我得到了一个无效的语法错误。我认为我没有构建索引范围,对吗,有什么建议吗

不用担心使用take,只需按如下方式为数组编制索引:

(A[x-10:x+10,y-10:y+10] == 0).all()
不用担心使用take,只需按如下方式对数组进行索引:

(A[x-10:x+10,y-10:y+10] == 0).all()

对子矩阵的条目进行简单的布尔检查即可

np.all(A[x-10:x+11,y-10:y+11]==0)

注意上面的索引不包括在内,所以我改为I-10:I+11

对子矩阵的条目进行简单的布尔检查即可

np.all(A[x-10:x+11,y-10:y+11]==0)
注意上面的索引不包括在内,所以我改为I-10:I+11

假设A是形状19,19:

import numpy as np
H = W = 19
x, y = 1, 1
N = 10
A = np.random.randint(10, size=(H,W))
然后

因为x-N是1-10=-9,所以A[x-N:x+N,y-N:y+N]相当于A[-9:11,-9:11], 这相当于[19-9:11,19-9:11],与[10:11,10:11]相同。 因此,只选择一个值

这并不是给你一个矩阵的所有条目,在给定的10个索引内 条目x,y

相反,您可以使用布尔掩码生成所需的子区域:

X, Y = np.ogrid[0:H,0:W]
mask = (np.abs(X - x) < N) & (np.abs(Y - y) < N)
假设A是形状为19,19的数组:

import numpy as np
H = W = 19
x, y = 1, 1
N = 10
A = np.random.randint(10, size=(H,W))
然后

因为x-N是1-10=-9,所以A[x-N:x+N,y-N:y+N]相当于A[-9:11,-9:11], 这相当于[19-9:11,19-9:11],与[10:11,10:11]相同。 因此,只选择一个值

这并不是给你一个矩阵的所有条目,在给定的10个索引内 条目x,y

相反,您可以使用布尔掩码生成所需的子区域:

X, Y = np.ogrid[0:H,0:W]
mask = (np.abs(X - x) < N) & (np.abs(Y - y) < N)

这似乎相似。可能会有帮助,这似乎很相似。也许会有帮助,谢谢!给maxymoo支票是因为他的答案是第一个,我想也许maxymoo是第一个,但是@mecalinum做对了,即I+11而不是I+10。这应该是有意义的+谢谢!给maxymoo支票是因为他的答案是第一个,我想也许maxymoo是第一个,但是@mecalinum做对了,即I+11而不是I+10。这应该是有意义的+1.