2011-09-07 341 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) 
相關問題