2017-10-16 13 views
0

나는 이런 식으로 보이는 설정을 가지고 있으며, 일부 행렬 계산을 한 후에 함수를 호출하려고 할 때 몇 가지 문제가 발생합니다. 나는이 작업을 수행하는보다 효율적인 방법이 있다면보고 싶었어요 :Python : TypeError : 'float'유형이 아닌 int로 시퀀스를 곱할 수 없으며 TypeError : unary - : 'list'에 대한 잘못된 피연산자 유형입니다. 이것을 코드화하는 가장 깨끗한 방법은 무엇입니까?

TypeError: bad operand type for unary -: 'list' 

내가 시도 : 나는 function_7에 전화 func7_list 무언가를 추가하려고하면

#Define functions 
    def function_7(func_7): 
     func_7 = [] 
     func_7.append([ [ [0,0], [0, -func7] ] ]) 
     return func7_ 

    def function_5(func_5): 
     func_5 = [] 
     slope_func5 = 1/math.sqrt(3) 
     theta = math.atan(slope_func5) 
     x_func5 = func_5*math.cos(theta) 
     y_func5 = func_5*math.sin(theta) 
     func_5.append([ [[0, x_func5], [0, y_func5]], [[0, -x_func5], [0, y_func5]] ]) 
     return func_5_ 

    func5_list = [] 
    func7_list = [] 

    #Set up matrix here 
    my_list = (0, 10, 1) 

    for i in my_list: 
     A = np.matrix([[0, 0, 1, 1, 0, 0], 
         [1, 1, 0, 0, 0, 0], 
         [2, 0, 0, 1, 0, 0], 
         [0, 0, 0, 0, 1.5, 1.5], 
         [3, 0, 0, 0, 0, 1.5], 
         [0, 0, 0, 0, 0, 1] 
     B = lambda i: np.matrix([[3], [8], [6], [12], [5], [i]]) 
     var = np.linalg.solve(A, B(i)) 

     func7_list.append(function_7(float(var[1,:])) 
     func5_list.append(function_5(float(var[2,:])) 

,이 오류가 발생합니다 function_5에 전화 func5_list 뭔가를 추가,이 오류가 얻을 :

TypeError: can't multiply sequence by non-int of type 'float' 

나는 그것이 내가 목록을 생성하고있어 방법에 문제가해야 알을 - 나는 func5_list의의 값을 반복 시도 dfunc7_list는 거기에 이전 함수를 호출했지만 그 중 하나는 작동하지 않았습니다. var [1 ,:] 또는 var [2 ,:]의 각 값에 대해 함수를 호출하고 출력 목록을 반환하는 방법에 대한 제안? 고맙습니다!

편집 : 문제를 파악했습니다. 이미 사용 된 변수를 호출하는 것이 었습니다.

+0

VAR 오른쪽 목록입니다? – gautamaggarwal

+0

매트릭스 출력이있는 목록입니다. –

답변

0

코드에서 수정했습니다. 귀하의 코드는 들여 쓰기 및 paranthesis 누락과 같은 많은 문제가 있습니다.

def function_7(func_7): 
    func_7 = [] 
    func_7.append([ [ [0,0], [0, -func7] ] ]) 
    return func7 

def function_5(func_5): 
    func_5 = [] 
    slope_func5 = 1/math.sqrt(3) 
    theta = math.atan(slope_func5) 
    x_func5 = func_5*math.cos(theta) 
    y_func5 = func_5*math.sin(theta) 
    func_5.append([ [[0, x_func5], [0, y_func5]], [[0, -x_func5], [0, y_func5]] ]) 
    return func_5 

func5_list = [] 
func7_list = [] 

#Set up matrix here 
my_list = (0, 10, 1) 

for i in my_list: 
    A = np.matrix([[0, 0, 1, 1, 0, 0], 
        [1, 1, 0, 0, 0, 0], 
        [2, 0, 0, 1, 0, 0], 
        [0, 0, 0, 0, 1.5, 1.5], 
        [3, 0, 0, 0, 0, 1.5], 
        [0, 0, 0, 0, 0, 1]]) 
    B = lambda i: np.matrix([[3], [8], [6], [12], [5], [i]]) 
    var = np.linalg.solve(A, B(i)) 
    func7_list.extend(map(float, var[1:])) 
    func5_list.extend(map(float, var[2:])) 

var 목록에 float 함수를 매핑 한 다음 위와 같이 출력 목록을 확장해야했습니다.

+0

감사합니다. 오류가 발생하지 않도록 도움을줍니다. 그러나, func5_list 또는 func7_list를 정확하게 출력하지는 않습니다. 그 함수가 반환해야하는 것과 같습니다. 나는 그들이 [[[0,0], [0, -func7]]] 또는 [[[0, x_func5], [0, y_func5]], [[0, -x_func5], [0, y_func5]]]. 어떻게하는지 아십니까? 첫 번째 게시물을 업데이트하여 for 루프의 각 출력에서 ​​함수를 호출하는 방법을 알려줍니다. –

+0

새 목록 (func7_test)을 만들고 다음과 같이 추가하려고합니다 : func7_test.append (function_7 (func7_list)) 이전과 같은 오류가 발생합니다. –

0

아래에서이 코드를 사용해보십시오. 그것은 내 PC에 벌금을 작동하는 것 같군

import numpy as np 
#Define functions 
def function_7(func_7): 
    func_7 = [] 
    func_7.append([ [ [0,0], [0, -func7] ] ]) 
    return func7 

def function_5(func_5): 
    func_5 = [] 
    slope_func5 = 1/math.sqrt(3) 
    theta = math.atan(slope_func5) 
    x_func5 = func_5*math.cos(theta) 
    y_func5 = func_5*math.sin(theta) 
    func_5.append([ [[0, x_func5], [0, y_func5]], [[0, -x_func5], [0, y_func5]] ]) 
    return func_5 

func5_list = [] 
func7_list = [] 

#Set up matrix here 
my_list = (0, 10, 1) 

for i in my_list: 
    A = np.matrix([[0, 0, 1, 1, 0, 0], 
        [1, 1, 0, 0, 0, 0], 
        [2, 0, 0, 1, 0, 0], 
        [0, 0, 0, 0, 1.5, 1.5], 
        [3, 0, 0, 0, 0, 1.5], 
        [0, 0, 0, 0, 0, 1]]) 
    B = lambda i: np.matrix([[3], [8], [6], [12], [5], [i]]) 
    #print B(i) 
    var = np.linalg.solve(A, B(i)) 
    #print var 
    func7_list.append(float(var[1,:])) 
    func5_list.append(float(var[2,:])) 
print func5_list 
print func7_list 

출력 : [0.33333333333333304, -9.666666666666668, -0.666666666666667] [6.333333333333334이 11.333333333333334은 6.833333333333334]

+0

죄송합니다. 첫 번째 항목을 업데이트했습니다. 실제로이 함수가 for 루프의 각 항목에 대해 작동하는 곳을 원합니다. func7_list.append (function_7 (float (var [1 ,:])))). 이것이 내가 오류를 얻는 곳입니다. –