np.where 在没有屏蔽数组或任何第二个参数的二维数组上
np.where on 2D array without masked array or any second argument
我正在检查一个代码片段,有一个代码如下
z = [[True, False, True],[True, True, True],[False, False, False]]
xz, yz = np.where(z)
print(xz)
print(yz)
这个returns
[0 0 1 1 1]
[0 2 0 1 2]
如果我做
z = [[True, False, True],[True, True, True]]
我会得到与
相同的结果
[0 0 1 1 1]
[0 2 0 1 2]
当我做的时候
z = [[True, False],[True, True]]
结果是
[0 1 1]
[0 0 1]
我没能弄清楚它在做什么,这是在 github 上的 SynthText repo 中介绍的。
如果有人可以帮助理解它的作用,我将不胜感激?它的应用是什么?
如果您仔细阅读 np.where
, you find that it's equvivalent to np.asarray(condition).nonzero()
in case you only provide the condition parameter, so the behaviour comes down to np.nonzero
上的文档。
>>> z = np.array([[True, False], [True, True]])
此数组中有三个非零元素,索引为:[0, 0]
、[1, 0]
、[1, 1]
>>> np.nonzero(z)
(array([0, 1, 1], dtype=int64), array([0, 0, 1], dtype=int64))
元组的第一个元素是每个非零元素的第一个索引 ([0, 1, 1]
),元组的第二个元素是每个非零元素的第二个索引 ([0, 0, 1]
)。
如果我们考虑二维数组,例如矩阵,np.where(z)
有助于获取元素的索引为 True 或非零。二维数组索引有两个分量,对应于数组的每个元素,如 [rows' number, columns' number]
。
第一个变量,即您示例中的 xz
,显示 True 或非零元素的行号,yz
显示相应列的号。以下代码可能有助于理解:
xz = [1th-x, 2nd-x, 3rd-x]
yz = [1th-y, 2nd-y, 3rd-y]
nonzero_indices = [[1th-x, 1th-y], [2nd-x, 2nd-y], [3rd-x, 3rd-y]]
使用以下代码将获取每个 True 或非零元素的索引,因为它在上面的代码中显示为 nonzero_indices
:
print(np.transpose(np.where(z)))
这会给出 [[0 0] [1 0] [1 1]]
希望对你有帮助。
我正在检查一个代码片段,有一个代码如下
z = [[True, False, True],[True, True, True],[False, False, False]]
xz, yz = np.where(z)
print(xz)
print(yz)
这个returns
[0 0 1 1 1]
[0 2 0 1 2]
如果我做
z = [[True, False, True],[True, True, True]]
我会得到与
相同的结果[0 0 1 1 1]
[0 2 0 1 2]
当我做的时候
z = [[True, False],[True, True]]
结果是
[0 1 1]
[0 0 1]
我没能弄清楚它在做什么,这是在 github 上的 SynthText repo 中介绍的。 如果有人可以帮助理解它的作用,我将不胜感激?它的应用是什么?
如果您仔细阅读 np.where
, you find that it's equvivalent to np.asarray(condition).nonzero()
in case you only provide the condition parameter, so the behaviour comes down to np.nonzero
上的文档。
>>> z = np.array([[True, False], [True, True]])
此数组中有三个非零元素,索引为:[0, 0]
、[1, 0]
、[1, 1]
>>> np.nonzero(z)
(array([0, 1, 1], dtype=int64), array([0, 0, 1], dtype=int64))
元组的第一个元素是每个非零元素的第一个索引 ([0, 1, 1]
),元组的第二个元素是每个非零元素的第二个索引 ([0, 0, 1]
)。
如果我们考虑二维数组,例如矩阵,np.where(z)
有助于获取元素的索引为 True 或非零。二维数组索引有两个分量,对应于数组的每个元素,如 [rows' number, columns' number]
。
第一个变量,即您示例中的 xz
,显示 True 或非零元素的行号,yz
显示相应列的号。以下代码可能有助于理解:
xz = [1th-x, 2nd-x, 3rd-x]
yz = [1th-y, 2nd-y, 3rd-y]
nonzero_indices = [[1th-x, 1th-y], [2nd-x, 2nd-y], [3rd-x, 3rd-y]]
使用以下代码将获取每个 True 或非零元素的索引,因为它在上面的代码中显示为 nonzero_indices
:
print(np.transpose(np.where(z)))
这会给出 [[0 0] [1 0] [1 1]]
希望对你有帮助。