2015-04-25 5 views
-1

Я пробовал разные способы, но я не могу понять, почему я не могу создать матрицу в numpy.Создание матриц в Numpy?

Я получаю «TypeError: новый() принимает от 2 до 4 позиционных аргументов, а 5 были даны» ошибка, когда я звоню:

def createGST(dictionary): 
    x = int(dictionary['x']) 
    y = int(dictionary['y']) 
    z = int(dictionary['z']) 
    matrix = np.matrix((str(1),str(0),str(0),str(x)),(str(0),str(1),str(0),str(y)),(str(0),str(0),str(1),str(z)),(str(0),str(0),str(0),str(1))) 
    return matrix 

Он не работает даже без типажей к Силе (). Я использую python 3.4.

+0

Дайте образец того, что вы хотите. Очевидно, что вам не хватает набора из [] или(). Но почему 'str'? Что это должно делать? Вам нужна матрица чисел или строк? – hpaulj

+0

Из любопытства, почему _are_ вы переходите к строкам? Действительно, единственная причина использовать матрицу вместо всего лишь 2D-массива - это иметь более удобный доступ к операциям с матрицей-математикой, и ни одна из этих операций не имеет никакого смысла в строках. – abarnert

+0

'np.matrix' принимает строковый ввод:' np.matrix ('1,2,3; 4,5,6') '. Это предназначено для эмуляции MATLAB и обычно не используется. – hpaulj

ответ

2

Ответ указан в сообщении об ошибке. Вы проходя пять параметров np.matrix:

matrix = np.matrix((str(1), str(0), str(0), str(x)), 
        (str(0), str(1), str(0), str(y)), 
        (str(0), str(0), str(1), str(z)), 
        (str(0), str(0), str(0), str(1))) 

np.matrix не принимает пять параметров. Это то, что вы намеревались сделать:

matrix = np.matrix(((str(1), str(0), str(0), str(x)), 
        (str(0), str(1), str(0), str(y)), 
        (str(0), str(0), str(1), str(z)), 
        (str(0), str(0), str(0), str(1)))) 

Обратите внимание на дополнительные скобки.

+0

AH, поэтому я вижу Я думал, что использую нужный номер. Я клянусь, что документация, которую я нашел, все на 2,7 или плохих примерах. Спасибо mate! – firedfns13

+0

не проблема, но это то же самое в 2.7, как и в 3.4: вам нужно приложить ряд s в списке, кортеже или другой последовательности перед передачей их в 'matrix'. есть ли что-нибудь, что я могу сделать, чтобы улучшить свой ответ для вас? если нет, не могли бы вы принять его? это покажет другим пользователям, что этот вопрос был разрешен. – dbliss

+0

но, на самом деле, я думаю, я понимаю, что вы имеете в виду. мне кажется, что вы передаете четыре параметра - четыре строки, но ошибка говорит, что вы проходите пять. ошибка также говорит о том, что 'matrix' принимает четыре параметра, но в docstring' matrix' перечислены только три параметра. Я не уверен, что сделка с этим. тем не менее, ключевым моментом является то, что все данные должны быть представлены в качестве первого параметра, а не как один параметр для каждой строки. – dbliss

0

Что касается сообщения об ошибке около 4-х параметров, посмотрите на np.matrix код показывает, почему:

class matrix(N.ndarray): 
    def __new__(subtype, data, dtype=None, copy=True): 
    .... 

np.matrix([...],...) создает объект класса matrix. Поэтому он называет класс __new__. Обычно создание объектов вызывает __init__, но здесь должен быть некоторый нюанс, который требует использования базового __new__. В любом случае вы можете увидеть 4 аргумента, которые упоминается в сообщении об ошибке. Первый - автоматический. Так что плюс ваши четыре кортежа составляют 5.

Если вам не хватает вашей лицензии MATLAB, посмотрите на Octave. Он принимает большую часть того же синтаксиса. Тем не менее, добро пожаловать на Python и numpy.

np.matrix может выглядеть так, как и MATLAB, но более старая версия (например, 3.5). Вы ограничены 2d. В целом полезнее базовый np.array.

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