Хорошо, это не проблема кодирования, а математическая проблема. Я написал некоторый код для вас, так как совершенно очевидно, что вы новичок, поэтому там будет какой-то незнакомый синтаксис, который вы должны изучить, чтобы избежать подобных проблем в будущем. Вы можете использовать их не так часто, но полезно знать, как это сделать, потому что это расширяет ваше понимание синтаксиса python в целом.
Прежде всего, полный код для простого копирования и вставки:
import numpy as np
result=np.array([[1,2,3,4,5,6,7,8,9],
[11,12,13,14,15,16,17,18,19],
[21,22,23,24,25,26,27,28,29]])
output = np.array(tuple(result[:,i] for i in (0,1,3)))
def Matrix_Operation(Matrix,Coefficient):
if (Matrix.shape == Matrix.shape[::-1]
and isinstance(Matrix,np.ndarray)
and isinstance(Coefficient,float)):
return Coefficient*(Matrix-Matrix.transpose())
else:
print('The shape of you Matrix is not palindromic')
print('You cannot substitute matrices of unequal shape')
print('Your shape: %s'%str(Matrix.shape))
print(Matrix_Operation(output,0.5))
Теперь давайте поговорим о пошаговом объяснении того, что здесь происходит:
import numpy as np
result=np.array([[1,2,3,4,5,6,7,8,9],
[11,12,13,14,15,16,17,18,19],
[21,22,23,24,25,26,27,28,29]])
Python использует отступ (выравнивание пробелов) как неотъемлемую часть своего синтаксиса. Однако, если вы предоставляете скобки, большую часть времени вам не нужно выравнивать отступы, чтобы интерпретатор мог понять ваш код. Если вы предоставляете большой массив значений вручную, обычно рекомендуется начинать новые строки с запятых (здесь запятые, разделяющие подсписки). Это просто более читабельно, и, таким образом, ваши данные не будут отображаться за кадром в вашей программе кодирования.
output = np.array(tuple(result[:,i] for i in (0,1,3)))
Понимание списков является большой проблемой в python и действительно удобно для грязных строк. Насколько я знаю, никакой другой язык не дает вам такой возможности. Это одна из причин, почему python так здорово. Я в основном создал список списков, где каждый подсписок является результатом [:, i] для каждого i в (0,1,3). Это приведено как кортеж (да, постижение списков также может быть сделано с кортежами, а не только со списками). Наконец, я обернул его в функцию np.array, так как этот тип необходим для наших математических операций позже.
def Matrix_Operation(Matrix,Coefficient):
if (Matrix.shape == Matrix.shape[::-1]
and isinstance(Matrix,np.ndarray)
and isinstance(Coefficient,(float,int))):
return Coefficient*(Matrix-Matrix.transpose())
else:
print('The shape of you Matrix is not palindromic')
print('You cannot substitute matrices of unequal shape')
print('Your shape: %s'%str(Matrix.shape))
print(Matrix_Operation(output,0.5))
Если вы собираетесь создать сложную формулу в python коде, почему бы и нет обернуть его внутри абстрактной функции? Вы также можете включить много «контроля качества» в функцию, чтобы проверить, правильно ли задан ввод для задачи, которую он должен выполнять.
Ваш код не выполнен, потому что вы пытались вычесть (2,2,3) -образная матрица из (3,2,2) -матрицы. Поэтому нам понадобится фрагмент кода, чтобы проверить, имеет ли наша предоставленная матрица форму палиндроми c. Вы можете изменить порядок элементов в контейнере, выполнив Container[::-1]
, и поэтому мы спрашиваем, если Matrix.shape == Matrix.shape [:: - 1]. Далее, необходимо, чтобы наша Матрица была np.ndarray
и если наш коэффициент был числом. Вот что я делаю с функцией isinstance()
. Вы можете проверить несколько типов одновременно, поэтому isinstance(Coefficient,(float,int))
содержит кортеж с int и float.
Теперь, когда мы убедились, что наш ввод имеет смысл, мы можем предварительно преобразовать нашу Matrix_Operation. Итак, в заключение: проверьте, если ваша математика solid, прежде чем просить SO о помощи, потому что люди здесь могут быть довольно раздражены на такие вещи. Вы, наверное, уже заметили, что кто-то уже отклонил ваш вопрос. Лично я считаю, что необходимо дать новичкам задавать пару глупых вопросов, прежде чем они попадут в паз, но для этого, как мне кажется, и есть кнопка голосования.