Как выбрать строку из остальной части набора данных и добавить ее в исходную матрицу в Python? - PullRequest
1 голос
/ 17 октября 2019

Предположим, N = 7. Итак, моя исходная матрица X будет 7x6, я хочу создать Y-матрицу размером 8x6.

Здесь я хочу поместить цикл таким образом, чтобы он выбрал 8-ю строку, Find | YT @ Y |, а затем заменил 8-ю строку на 9-ю, find | YT @ Y |и так далее .. для остальной части набора данных. И окончательная Y-матрица будет иметь размер 8x6, имея 8-ю строку наибольшего | YT @ Y |из остальной части набора данных.

1-й столбец - это индекс 'ID'. Я также хочу показать индексы Y.

import pandas as pd
import numpy as np
import io

data = '''
ID,M,N,O,P,Q,R
5362,0.974,-0.404,-0.763,0.868,-0.5,0.16
485,-0.659,0.531,0.623,0.402,0.772,0.506
582,0.045,0.994,0.762,-0.036,0.117,-0.355
99,0.777,0.537,0.391,0.456,0.329,0.108
75,-0.44,0.522,0.856,-0.04,0.656,-0.935
474,0.357,0.81,0.135,0.389,0.055,0.224
594,-0.291,0.031,0.742,-0.332,0.815,0.983
597,0.968,-0.357,0.591,0.892,0.375,0.88
124,0.737,0.611,0.764,0.289,0.298,-0.705
635,0.883,0.96,-0.987,0.29,0.997,0.186
7894,-0.045,0.047,0.523,0.068,-0.9,0.356
1268,0.561,0.736,-0.375,0.465,0.908,0.2
38,0.465,0.623,0.734,0.145,0.489,0.759
88,0.029,0.166,0.098,0.285,0.18,0.829
887,0.464,0.652,-0.896,0.07,0.772,-0.268
994,-0.611,0.986,0.708,-0.195,0.938,0.166
478,0.109,0.664,0.977,0.2,-0.466,0.676
693,0.893,0.536,0.827,0,0.658,-0.31
455,0.745,0.851,0.025,0.667,0.094,0.127
874,0.036,-0.212,0.879,0.966,0.788,0.719
417,0.316,0.553,0.872,-0.274,0.946,0.238
44,0.517,-0.113,0.992,0.521,0.595,0.674
101,0.699,0.095,0.269,0.628,-0.711,-0.141
60,0.993,0.348,-0.44,0.807,0.013,0.325
8741,-0.319,0.535,0.717,-0.89,0.334,0.279
9635,0.363,0.812,0.77,0.715,0.34,0.327
2563,0.649,-0.788,0.405,0.056,0.25,0.08
5463,0.491,0.414,0.084,0.173,0.397,-0.499
1044,-0.669,0.288,0.424,-0.324,0.491,-0.581
999,0.208,0.082,-0.425,0.916,0.582,0.45
'''

df = pd.read_csv(io.StringIO(data),index_col=0)
M = df.iloc[:,:]
L = len(df.columns)

N = int(input( 'No. of rows for matrix: ' ))
if (N<L):
    print("Error Occured.")
else:
    X = M.iloc[0 : N ,:]
    P = np.dot(X.T,X)
    result =  np.linalg.cond(P)
    print("Condition number of matrix:")
    print(result)

Я пытался создать матрицу Y, но она занимает только следующую строку. Я хочу поставить это в цикл и проверить | YT @ Y |добавляя каждую строку одну за другой к моей исходной матрице X и возвращая матрицу Y с наибольшим значением det | YT @ Y |.

 Y = M.iloc[0 : N+1 ,:]
    Q = np.dot(Y.T,Y)
    det1 = np.linalg.det(Q)
    print("\nDeterminant of |Y.T@Y| : ",det1)
    result1 =  np.linalg.cond(Q)
    print("\nCondition number of matrix Q : ", result1)

1 Ответ

1 голос
/ 18 октября 2019

Интересный вопрос. Чтобы поместить ваш код в цикл, вам просто нужно немного изменить индекс. Вы можете использовать разделенный запятыми список для вашего первого индекса. Что-то вроде [0, ..., N-1, last_row]. range(N) или эквивалентно 0:N даст вам вложенный список, но вы можете распаковать его с помощью оператора *.

In [17]: for last_row in range(N, len(M)): 
    ...:     Y = M.iloc[[*range(N), last_row] ,:] 
    ...:     Q = np.dot(Y.T,Y) 
    ...:     det1 = np.linalg.det(Q) 
    ...:     print("\nDeterminant of |Y.T@Y| : ",det1) 
    ...:     result1 =  np.linalg.cond(Q) 
    ...:     print("\nCondition number of matrix Q : ", result1) 
    ...:                                                                                                                                                                                                    

Determinant of |Y.T@Y| :  4.624339160318527

Condition number of matrix Q :  77.36824220530482

Determinant of |Y.T@Y| :  0.9409090804611786

Condition number of matrix Q :  263.91293535163385

Determinant of |Y.T@Y| :  33.03686043392585

Condition number of matrix Q :  16.581346840200407

Determinant of |Y.T@Y| :  12.63729785336232

Condition number of matrix Q :  22.538552279445806

Determinant of |Y.T@Y| :  12.263181714746796

Condition number of matrix Q :  17.66370953358896

Determinant of |Y.T@Y| :  0.7123582600048612

Condition number of matrix Q :  281.44289604007963

Determinant of |Y.T@Y| :  0.5339137593174599

Condition number of matrix Q :  257.90179496090224

Determinant of |Y.T@Y| :  23.995506419439238

Condition number of matrix Q :  16.575874347379973

Determinant of |Y.T@Y| :  2.253693250568694

Condition number of matrix Q :  91.90731212411028

Determinant of |Y.T@Y| :  10.651328369043002

Condition number of matrix Q :  29.76877614410439

Determinant of |Y.T@Y| :  1.2970342066212042

Condition number of matrix Q :  269.1794726321578

Determinant of |Y.T@Y| :  0.9369419026433131

Condition number of matrix Q :  169.53229478788683

Determinant of |Y.T@Y| :  4.651161625943493

Condition number of matrix Q :  81.67535737177332

Determinant of |Y.T@Y| :  1.5506338931653931

Condition number of matrix Q :  177.70943680087242

Determinant of |Y.T@Y| :  4.279015451906647

Condition number of matrix Q :  75.61213665437202

Determinant of |Y.T@Y| :  6.711423504463288

Condition number of matrix Q :  21.1381271541492

Determinant of |Y.T@Y| :  1.4394193359597567

Condition number of matrix Q :  120.40054369027756

Determinant of |Y.T@Y| :  0.8395233498254766

Condition number of matrix Q :  307.60761120624073

Determinant of |Y.T@Y| :  1.539364214268676

Condition number of matrix Q :  114.34947167985221

Determinant of |Y.T@Y| :  2.4774355106941384

Condition number of matrix Q :  144.27102186810066

Determinant of |Y.T@Y| :  2.2023866036448174

Condition number of matrix Q :  69.51903280436987

Determinant of |Y.T@Y| :  0.8649208511848647

Condition number of matrix Q :  175.3486680980588

Determinant of |Y.T@Y| :  2.841536699473401

Condition number of matrix Q :  85.79379870960514

Уверен, вам удастся самостоятельно найти самую большую матрицу:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...