2016-08-16 60 views
1

存在一个nd.array称为label1,打印出来时,它具有计算不同统计多维numpy的阵列

[[0 0 0 ..., 0 0 0] 
[0 0 0 ..., 0 88 0] 
[0 0 0 ..., 0 0 0] 
..., 
[0 0 1 ..., 0 0 0] 
[0 0 0 ..., 0 2 0] 
[0 0 0 ..., 0 0 0]] 

它的形状是(729,816)。有什么方法可以知道这个数组中有多少个唯一值?当运行print(np.where(label1==label1.max()))时,结果看起来像这样(array([ 0, 0, 0, ..., 234, 234, 234]), array([450, 451, 452, ..., 433, 434, 435])),这是否意味着它有两个数组(或两行)具有这些最大值?

回答

0
  1. 要获得数组中排序的唯一值,请执行numpy.unique(label1)
  2. 在二维数组上调用时,numpy.where返回两个数组,它们是所有匹配项的行和列坐标。所以,如果numpy.where回报(array([0]), array([1]))这意味着一个匹配的行0中,第1列

编辑:如果要提取和打印的行和列从numpy.where坐标,你可以不喜欢它这个:

rows, cols = np.where(label1==label1.max()) 
for row, col in zip(rows, cols): 
    print row, col 
+0

谢谢你的回答。关于给出的例子,这是否意味着在(行0,列450),(行0,列451)等处找到匹配项。打印函数不能列出那些长阵列。是否有任何方法根据(行列)组合打印出或提取所有这些位置? – user785099

+0

是的,它的确如此。您拥有访问这些坐标所需的全部信息。查看我的帖子的编辑。 – bpachev