2014-06-23 61 views
-1

嗨所以我有一個二維數組,看起來像這樣:修改二維數組(Python)的

12381.000 63242.000  0.000  0.000  0.000  8.000  9.200  0.000  0.000  
12401.000 8884.000  0.000  0.000 96.000 128.000 114.400 61.600  0.000  
12606.000 74204.000 56.000 64.000 72.000 21.600 18.000  0.000  0.000  
12606.000 105492.000  0.000  0.000  0.000  0.000  0.000  0.000 45.600  
12606.000 112151.000  2.400  4.000  0.000  0.000  0.000  0.000  0.000  
12606.000 121896.000  0.000  0.000  0.000  0.000  0.000 60.800  0.000  

(切斷夫婦由於格式化列)

所以這表示員工ID,部門ID,然後是每個員工工作的12個月以及他們每個月的工作時間。我的二維數組基本上是一個列表,其中每一行都是它自己的列表。我試圖將每個非零值轉換爲一個值並保留所有的零。有857行和14列。我的代碼如下:

def convBin(A): 
    """Nonzero values are converted into 1s and zero values are kept constant. 
    """ 
    for i in range(len(A)): 
     for j in range(len(A[i])): 
      if A[i][j] > 0: 
       A[i][j] == 1 
      else: 
       A[i][j] == 0 
    return A 

有人能告訴我我做錯了什麼嗎?

+0

爲什麼*您認爲*你做錯了什麼?你期待的輸出是什麼,你會得到什麼?你的數據實際在什麼格式 - list中的'list'? 'numpy.ndarray'? 'pandas.DataFrame'? – jonrsharpe

+0

我的輸出是相同的確切數組。我不只是0和1的 – user3758443

+0

我的數據是在列表中 – user3758443

回答

3

你正在做平等評價,不分配,你的循環中:

A[i][j] == 1 

應該

A[i][j] = 1 
     #^note only one equals sign 

而且,也沒有必要return A; A正在進行就地修改,因此通過刪除明確的return ...行來隱含地通過return None

你應該記住,承擔:

  • 你並不真正想做的else情況下任何東西;和
  • 迭代range(len(...))不是Pythonic - 使用例如enumerate

因此你的功能可以簡化爲:

def convBin(A): 
    """Convert non-zero values in 2-D array A into 1s.""" 
    for row in A: 
     for j, val in enumerate(row): 
      if val: 
       row[j] = 1 
+0

非常感謝! – user3758443