In [68]: ingreso_datos = np.array([[ 1, 13, 14, 15, 7,
...: 8, 9],
...: [ 2, 16, 17, 18, 10, 11,
...: 12],
...: [ 3, 7, 8, 9, 1, 2,
...: 3],
...: [ 4, 10, 11, 12, 4, 5,
...: 6],
...: [ 5, 7, 8, 9, 10, 11,
...: 12],
...: [ 6, 1, 2, 3, 4, 5,
...: 6]])
In [69]: ingreso_datos.shape
Out[69]: (6, 7)
Что indices
создание не делает ничего существенного:
In [70]: indices = [] # moved outside of the loop
...: for i in range(len(ingreso_datos)):
...: indices.append([ingreso_datos[i][0], ingreso_datos[i][1], ingreso_datos[i][2], ing
...: reso_datos[i][3],
...: ingreso_datos[i][4], ingreso_datos[i][5], ingreso_datos[i][6]])
...:
...:
In [71]: np.array(indices).shape
Out[71]: (6, 7)
In [72]: np.allclose(ingreso_datos, np.array(indices))
Out[72]: True
little_matrix
не обязательно должно быть в l oop, так как оно не меняется:
In [74]: little_matrix
Out[74]:
array([[ 200000., 0., 0., -200000., 0., 0.],
[ 0., 2000., 10000., 0., -2000., 10000.],
[ 0., 10000., 50000., 0., -10000., 50000.],
[-200000., 0., 0., 200000., 0., 0.],
[ 0., 2000., -10000., 0., 2000., -10000.],
[ 0., 10000., 50000., 0., -10000., 50000.]])
Что касается вашей итерации на row
:
In [75]: np.array(indices[0][1:])-1
Out[75]: array([12, 13, 14, 6, 7, 8])
In [77]: ingreso_datos[0,1:]-1
Out[77]: array([12, 13, 14, 6, 7, 8])
Итак, ваше итеративное присвоение master_matrix
становится:
In [78]: master_matrix=np.zeros((18,18))
In [80]: for row in ingreso_datos:
...: indices = row[1:]-1
...: master_matrix[np.ix_(indices,indices)]=little_matrix
...:
In [81]: master_matrix
Out[81]:
array([[ 200000., 0., 0., -200000., 0., 0.,
-200000., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.],
[ 0., 2000., 10000., 0., -2000., 10000.,
0., 2000., -10000., 0., 0., 0.,
0., 0., 0., 0., 0., 0.],
...
Я подозреваю, что мы можем также исключите эту итерацию, но для этого потребуется дополнительная работа.
Рассматривая индексы в целом:
In [88]: x = ingreso_datos[:,1:]-1
In [89]: x
Out[89]:
array([[12, 13, 14, 6, 7, 8],
[15, 16, 17, 9, 10, 11],
[ 6, 7, 8, 0, 1, 2],
[ 9, 10, 11, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11],
[ 0, 1, 2, 3, 4, 5]])
Я вижу некоторое совпадение. Например, последняя строка над записью записывает некоторые значения, записанные в строке 2:
In [90]: master_matrix[:6,:6]
Out[90]:
array([[ 200000., 0., 0., -200000., 0., 0.],
[ 0., 2000., 10000., 0., -2000., 10000.],
[ 0., 10000., 50000., 0., -10000., 50000.],
[-200000., 0., 0., 200000., 0., 0.],
[ 0., 2000., -10000., 0., 2000., -10000.],
[ 0., 10000., 50000., 0., -10000., 50000.]])
In [91]: master_matrix[np.ix_(x[2],x[2])]
Out[91]:
array([[ 200000., 0., 0., -200000., 0., 0.],
[ 0., 2000., 10000., 0., -2000., 10000.],
[ 0., 10000., 50000., 0., -10000., 50000.],
[-200000., 0., 0., 200000., 0., 0.],
[ 0., 2000., -10000., 0., 2000., 10000.],
[ 0., 10000., 50000., 0., 10000., 50000.]])
(обратите внимание на изменение знака в правом нижнем углу).
Учитывая, что на круге невозможно повторить итеративное назначение одним вызовом.