2013-12-20 3 views
1

Попытка создать матрицу для запуска алгоритма поиска.Python: аргументы - разрешено 4 аргумента, 5 задано

from numpy import * 

z11 = vars() 
z12 = vars() 
z13 = vars() 
z14 = vars() 
z21 = vars() 
z22 = vars() 
z23 = vars() 
z24 = vars() 
z31 = vars() 
z32 = vars() 
z33 = vars() 
z34 = vars() 
z41 = vars() 
z42 = vars() 
z43 = vars() 
z44 = vars() 

A = matrix([z11,z12,z13,z14], [z21,z22,z23,z24], [z31,z32,z33,z34], [z41,z42,z43,z44]) 

При запуске на наличие ошибок, он приходит с:

Traceback (most recent call last): 
    File "Fusion Puzzle Algorithm 2.py", line 20, in <module> 
    A = matrix([z11,z12,z13,z14], [z21,z22,z23,z24], [z31,z32,z33,z34], [z41,z42,z43,z44]) 
TypeError: __new__() takes at most 4 arguments (5 given) 

Как я могу получить эту работу?

+0

Посмотрите на то, что 'matrix' ожидает аргументы чтобы быть: http://docs.scipy.org/doc/numpy/reference/generated/numpy.matrix.html – Blender

ответ

0

Я не совсем уверен, что ваш прецедент, но всегда проще заменять повторяющиеся утверждения на циклы. Например, вы явно выписываете 16 имен переменных, даже если имена не очень важны. Вместо этого поместите их непосредственно в (вложенных) списков с использованием for петель

variables = [] 
for row in range(4): 
    row_variables = [] 
    for col in range(4): 
     row_variables.append(vars()) 
    variables.append(row_variables) 
A = matrix(variables) 

Что эквивалентно:

variables = [[vars() for col in range(4)] for row in range(4)] 
A = matrix(variables) 

Или даже:

variables = [[vars()] * 4 for row in range(4)] 
A = matrix(variables) 
7

Вы, вероятно, хотите что-то вроде:

A = matrix([[z11,z12,z13,z14], [z21,z22,z23,z24], [z31,z32,z33,z34], [z41,z42,z43,z44]]) 

Обратите внимание, что есть только один аргумент матрицы конструктора.

+0

спасибо и извините за то, что вы такой noob. – user3123787

+0

Кортеж будет работать также A = матрица (([z11, z12, z13, z14], [z21, z22, z23, z24], [z31, z32, z33, z34], [z41, z42, z43, z44])) –

Смежные вопросы