2013-10-27 71 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) 
>>> 
相关问题