为什么是numpy.where当仅找到一个True值时返回两个数组,但是当n True> 1时,每个True都返回一个数组。我希望它总是为每个true返回一个数组。
import numpy as np
a = np.zeros((5,5),dtype=int)
print(a)
#[[0 0 0 0 0]
# [0 0 0 0 0]
# [0 0 0 0 0]
# [0 0 0 0 0]
# [0 0 0 0 0]]
a[1,1]=1
print(np.where(a==1))
#(array([1]), array([1])) #Two separate arrays
#Why not array([1,1])
a[1,2]=1
print(np.where(a==1))
#(array([1, 1]), array([1, 2])) #One array for each True, desired behavior
答案 0 :(得分:1)
np.where
返回指定条件为True
的行和列索引。在您考虑的示例中,巧合的是,行列索引直接与满足条件的位置匹配。因此,将另外一个位置设为1以了解np.where
。
import numpy as np
a = np.zeros((5,5),dtype=int)
a[1,1]=1
a[1,2]=1
a[2,3] = 1
row_ind, col_ind = np.where(a==1)
row_ind
Out[22]: array([1, 1, 2], dtype=int64)
col_ind
Out[23]: array([1, 2, 3], dtype=int64)
[(i,j) for i, j in zip(row_ind, col_ind)]
Out[24]: [(1, 1), (1, 2), (2, 3)]
答案 1 :(得分:1)
您对此的解释不太正确。对于二维数组,py::initialize_interpreter(); // I am purposely not using eval_file because in the future I might not be using files, but strings instead.
py::exec(readFile("mts.py"));
py::exec(readFile("main.py"));
py::finalize_interpreter();
返回两组索引:第一个数组包含沿第一个轴(行)的索引,第二个数组包含沿第二个轴(列)的索引。 (依此类推-对于3-D数组,您将获得三个数组,每个数组用于每个轴的索引。)
因此,您应该真正阅读numpy.where
,如下所示:值1存在于位置(array([1,2]), array([1,3]))
和(1, 1)
中。
这样返回的原因是,如果用返回的数组元组屏蔽原始数组,则只会在条件评估为true的位置获得值。