Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.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 为元组数组创建布尔掩码_Python_Tuples_Numpy Ndarray - Fatal编程技术网

Python 为元组数组创建布尔掩码

Python 为元组数组创建布尔掩码,python,tuples,numpy-ndarray,Python,Tuples,Numpy Ndarray,我有一个2D numpy数组,它有一个shape(3,3)和dtype=object,其元素是形式(str,str,float)的元组 但是当我试图得到一个布尔掩码时 print(my_array == template) 答案全是假的 [[False False False] [False False False] [False False False]] 然而,元素级比较仍然有效 print(my_array[0,0] == template) # This prints True

我有一个2D numpy数组,它有一个shape(3,3)和dtype=object,其元素是形式(str,str,float)的元组

但是当我试图得到一个布尔掩码时

print(my_array == template)
答案全是假的

[[False False False]
 [False False False]
 [False False False]]
然而,元素级比较仍然有效

print(my_array[0,0] == template) # This prints True
为什么布尔掩码返回全部False?如何使其工作

另外,我已经搜索了相关的主题,但无法使用任何





这里发生的是Python中的情况 所以当你这么做的时候

my_array == template
您实际正在做的(按行)是:

要验证情况是否如此,请尝试使用以下示例进行实验:

>>> other_array = np.array(['Apple', 'Orange', 5.0] * 3).reshape(3,3)
>>> other_array
array([['Apple', 'Orange', '5.0'],
       ['Apple', 'Orange', '5.0'],
       ['Apple', 'Orange', '5.0']], dtype='<U6')
>>> other_array == template
array([[ True,  True,  True],
       [ True,  True,  True],
       [ True,  True,  True]])


是否有需要元组数组的原因?数组中不能有另一个维度,或者可以使用pandas作为分类变量吗?

元素是元组,因为它们来自pandas multiIndex,而行实际上表示多索引值的序列。稍后我需要使用np.where来查找与给定模板相等的索引。因此,如果有一种方法可以像你建议的那样,通过向数组中添加另一个维度来去除元组,我想就可以了!但是有没有简单的方法呢?谢谢你的解释,非常有帮助!我建议你再问一个问题,提供更多关于你拥有的数据和你想要实现的目标的信息。
('Apple', 'Orange', 5.0) == 'Apple'
('Apple', 'Orange', 5.0) == 'Orange'
('Apple', 'Orange', 5.0) == 5.0
>>> other_array = np.array(['Apple', 'Orange', 5.0] * 3).reshape(3,3)
>>> other_array
array([['Apple', 'Orange', '5.0'],
       ['Apple', 'Orange', '5.0'],
       ['Apple', 'Orange', '5.0']], dtype='<U6')
>>> other_array == template
array([[ True,  True,  True],
       [ True,  True,  True],
       [ True,  True,  True]])
mask = np.array(list(map(lambda x: x == template,
                         my_array.flatten()))).reshape(my_array.shape)
mask = np.array([x == template for x in my_array.flatten()]).reshape(my_array.shape)