2011-09-07 165 views

回答

1

我不知道你的平均什么“S和Y坐标”,所以我假设你的意思行和列位置。

import numpy as np 
np.array([(s, list(row).index(your_element)) for s,row in enumerate(your_array)]) 

注意它会提高ValueError如果your_element是不包含在某行。

以下版本会给你一个可能包含比输入少的行的输出,但对于your_element从一行中缺失的情况不会引发ValueError

np.array([(s, list(row).index(your_element)) for s,row in enumerate(your_array) if your_element in row]) 
+0

是你理解正确的......我想写x和y坐标......那么,是否有任何解决方案只包含行元素退出时的第一个元素的索引 - 1?或者我们可以做任何后期处理来避免它? 谢谢 – Shan

+0

你希望你的代码对于哪里your_element没有被包含在一行中有什么行为?你可以a)首先从输入中删除这些行b)用占位符值填充输出的y位置c)引发异常 – wim

+0

以及输入中的行不应该被删除,因为它稍后将被用于索引。删除行也会干扰索引。输出应该像'[(row_num,col_num),(row_num,col_num),(row_num,col_num),...,(row_num,col_num)]',其中结果中的第一个元素告诉行和列第一次发现该行中的特定元素,等等......我希望现在会清楚......请让我知道是否有任何问题。谢谢 – Shan

1

如果我理解正确的问题,你想是这样的:

import numpy as N 
# 
nrows=5 
ncols=10 
# 
a=N.random.random((nrows,ncols)) 
b=-99*N.ones((nrows,2)) 
# 
for j in range(nrows): 
    for i in range(ncols): 
     if(a[j,i]<0.5): 
      b[j,0]=i 
      b[j,1]=j 
      continue 
1
>>> # generate some fake data: 
>>> A = NP.random.randint(5, 10, 100).reshape(10, 10) 
>>> A 
    array([[5, 7, 8, 8, 5, 6, 6, 9, 6, 9], 
     [9, 8, 8, 9, 5, 6, 6, 9, 8, 9], 
     [8, 5, 6, 7, 8, 9, 5, 8, 6, 7], 
     [5, 8, 8, 6, 9, 6, 8, 5, 8, 9], 
     [6, 9, 8, 8, 5, 7, 6, 5, 7, 6], 
     [7, 8, 6, 7, 6, 6, 7, 8, 6, 8], 
     [8, 6, 8, 9, 8, 8, 9, 6, 8, 7], 
     [8, 7, 8, 5, 9, 5, 7, 8, 6, 9], 
     [9, 6, 5, 9, 9, 8, 8, 9, 8, 8], 
     [6, 8, 5, 8, 6, 5, 8, 6, 8, 5]]) 

>>> # sort this 2D array along one axis (i chose row-wise) 
>>> A = NP.sort(A, axis=1) 
>>> A 
    array([[5, 5, 6, 6, 6, 7, 8, 8, 9, 9], 
     [5, 6, 6, 8, 8, 8, 9, 9, 9, 9], 
     [5, 5, 6, 6, 7, 7, 8, 8, 8, 9], 
     [5, 5, 6, 6, 8, 8, 8, 8, 9, 9], 
     [5, 5, 6, 6, 6, 7, 7, 8, 8, 9], 
     [6, 6, 6, 6, 7, 7, 7, 8, 8, 8], 
     [6, 6, 7, 8, 8, 8, 8, 8, 9, 9], 
     [5, 5, 6, 7, 7, 8, 8, 8, 9, 9], 
     [5, 6, 8, 8, 8, 8, 9, 9, 9, 9], 
     [5, 5, 5, 6, 6, 6, 8, 8, 8, 8]]) 

>>> # now diff the sorted array along the same axis 
>>> A1 = NP.diff(A ,axis=1) 

>>> # A1 contains non-zero values for "first occurrences" and 
>>> # zero values for repeat values 
>>> A1 
    array([[0, 1, 0, 0, 1, 1, 0, 1, 0], 
     [1, 0, 2, 0, 0, 1, 0, 0, 0], 
     [0, 1, 0, 1, 0, 1, 0, 0, 1], 
     [0, 1, 0, 2, 0, 0, 0, 1, 0], 
     [0, 1, 0, 0, 1, 0, 1, 0, 1], 
     [0, 0, 0, 1, 0, 0, 1, 0, 0], 
     [0, 1, 1, 0, 0, 0, 0, 1, 0], 
     [0, 1, 1, 0, 1, 0, 0, 1, 0], 
     [1, 2, 0, 0, 0, 1, 0, 0, 0], 
     [0, 0, 1, 0, 0, 2, 0, 0, 0]]) 

可以重新制定结果,A1,根据需要,例如,作为具有在至极相同的形状A1一个布尔阵列每个小区或者T/F根据该值是否在原始矩阵表示该值的第一次出现:

>>> ndx = A1==0 
>>> ndx 
    array([[ True, False, True, True, False, False, True, False, True], 
     [False, True, False, True, True, False, True, True, True], 
     [ True, False, True, False, True, False, True, True, False], 
     [ True, False, True, False, True, True, True, False, True], 
     [ True, False, True, True, False, True, False, True, False], 
     [ True, True, True, False, True, True, False, True, True], 
     [ True, False, False, True, True, True, True, False, True], 
     [ True, False, False, True, False, True, True, False, True], 
     [False, False, True, True, True, False, True, True, True], 
     [ True, True, False, True, True, False, True, True, True]], dtype=bool) 
相关问题