2013-10-27 69 views
1

夥計們,我對編程完全陌生,所以我希望得到您的幫助。我想打一個函數,一個2維數組,將每個非零元素,它的倒數,並把它在new_arr,但它並沒有給我什麼,我需要 這裏是我的代碼:獲取每個元素的反轉並將其放入python中

def question(arr):  
    for i in range(3): 
     for j in range(3): 
      z = arr[i][j] 
      new_arr[i][j] = z^-1 
    return new_arr[i][j] 

question([[70,52,13,67],[90,48,57,26],[43,45,67,89],[88,65,44,23]]) 

所以請幫忙嗎?

+0

請檢查您的壓痕!由於複製和粘貼而丟失了嗎? –

+0

@noazet'^'是按位運算符而不是運算符。您可以使用'**'操作符作爲電源操作員。 http://en.wikipedia.org/wiki/Bitwise_operation#XOR – ajay

+0

[Sage](http://www.sagemath.org)使用Python和一些額外的語法糖。所以在這種情況下'^'實際上是指數運算(而^^'是xor)。我喜歡自己下面的列表理解方法。 – kcrisman

回答

4

您可以使用list comprehension來解決這個問題

def question(arr): 
    return [[1.0/col if col else col for col in row] for row in arr] 

print question([[70,52,13,67],[90,48,57,26],[43,45,67,89],[88,65,44,23]]) 

要在您的方式

def question(arr): 
    new_arr = [] 
    for i in range(len(arr)): 
     row_arr = [] 
     for j in range(len(arr[i])): 
      row_arr.append(arr[i][j] ** -1) 
     new_arr.append(row_arr) 
    return new_arr 

print question([[70,52,13,67],[90,48,57,26],[43,45,67,89],[88,65,44,23]]) 

做到這一點你必須創建一個新的列表,每一行,並將其附加到結果。順便說一下,^是指在Python中按位異或。因此,您可能需要使用1.0/x表單或x**-1表單。 **指蟒蛇中的力量。

+0

我不能很好地得到這條線「col如果col另外col col排在行中」在排列中的行「 –

+0

@noazetabdo現在更新您的修改後的代碼。請檢查。 – thefourtheye

-1

如果您希望Python計算「z^-1」,則必須使用數學模塊。 數學模塊有一個函數pow,它有兩個參數,並返回base^power。 這是一個link pow的文檔。

您應該用「math.pow(z,-1)」替換「z^-1」,並將「導入數學」放在頂部。

+1

'^'是按位xor','**'是Python中的pow運算符。 – ajay

0

如果你可以使用numpy和INF的值是該則是0的任何項目接受:

import numpy as np 
a = np.array([[70,52,13,67],[90,48,57,26],[43,45,67,89],[88,65,44,0]], 
       dtype = np.float32) 

>>> 
>>> 1/a 
array([[ 0.01428571, 0.01923077, 0.07692308, 0.01492537], 
     [ 0.01111111, 0.02083333, 0.01754386, 0.03846154], 
     [ 0.02325581, 0.02222222, 0.01492537, 0.01123596], 
     [ 0.01136364, 0.01538462, 0.02272727,   inf]], dtype=float32) 
>>> a**-1 
array([[ 0.01428571, 0.01923077, 0.07692308, 0.01492537], 
     [ 0.01111111, 0.02083333, 0.01754386, 0.03846154], 
     [ 0.02325581, 0.02222222, 0.01492537, 0.01123596], 
     [ 0.01136364, 0.01538462, 0.02272727,   inf]], dtype=float32) 
>>> pow(a, -1) 
array([[ 0.01428571, 0.01923077, 0.07692308, 0.01492537], 
     [ 0.01111111, 0.02083333, 0.01754386, 0.03846154], 
     [ 0.02325581, 0.02222222, 0.01492537, 0.01123596], 
     [ 0.01136364, 0.01538462, 0.02272727,   inf]], dtype=float32) 
>>> 
>>> inverse_of_a = 1/a 
>>> inverse_of_a 
array([[ 0.01428571, 0.01923077, 0.07692308, 0.01492537], 
     [ 0.01111111, 0.02083333, 0.01754386, 0.03846154], 
     [ 0.02325581, 0.02222222, 0.01492537, 0.01123596], 
     [ 0.01136364, 0.01538462, 0.02272727,   inf]], dtype=float32) 
>>> 
相關問題