copy-n-paste создает список из 1 элемента:
In [591]: list_1 = [(np.array(['charge'], dtype='<U6'), np.array([[24]], dtype=float), np.array([
...: [2.0080e+03, 4.0000e+00, 2.0000e+00, 1.3000e+01, 8.0000e+00,
...: 1.7921e+01]]), np.array([[(np.array([[3.87301722, 3.47939356, 4.00058782, 4.01
...: 239519, 4.01970806]]), np.array([[-1.20066070e-03, -4.03026848e+00, 1.51273065e+00,
...: 1.50906328e+00, 1.51131819e+00, 1.51277913e+00,
...: 1.51183834e+00, 1.51024540e+00, 1.50779576e+00,
...: 1.50732203e+00, 1.51022594e+00, 1.51185336e+00]]), np.array([[0.000000e+00,
...: 2.532000e+00, 5.500000e+00, 8.344000e+00,
...: 1.112500e+01, 1.389100e+01, 1.667200e+01, 1.950000e+01,
...: 2.228200e+01, 2.506300e+01, 2.782800e+01, 3.064100e+01,
...: 3.345300e+01, 3.621900e+01, 3.973500e+01, 4.257800e+01]]))]],
...: dtype=[('Res1', 'O'), ('Rea2', 'O'), ('Res3', 'O')]))]
In [592]: len(list_1)
Out[592]: 1
Этот элемент является набором из 4 элементов:
In [593]: list_1[0]
Out[593]:
(array(['charge'], dtype='<U6'),
array([[24.]]),
array([[2.0080e+03, 4.0000e+00, 2.0000e+00, 1.3000e+01, 8.0000e+00,
1.7921e+01]]),
array([[(array([[3.87301722, 3.47939356, 4.00058782, 4.01239519, 4.01970806]]), array([[-1.20066070e-03, -4.03026848e+00, 1.51273065e+00,
1.50906328e+00, 1.51131819e+00, 1.51277913e+00,
1.51183834e+00, 1.51024540e+00, 1.50779576e+00,
1.50732203e+00, 1.51022594e+00, 1.51185336e+00]]), array([[ 0. , 2.532, 5.5 , 8.344, 11.125, 13.891, 16.672, 19.5 ,
22.282, 25.063, 27.828, 30.641, 33.453, 36.219, 39.735, 42.578]]))]],
dtype=[('Res1', 'O'), ('Rea2', 'O'), ('Res3', 'O')]))
In [594]: type(_)
Out[594]: tuple
In [595]: len(__)
Out[595]: 4
, который мы затем можем распаковать в 4 переменные:
In [596]: var1,var2,var3,var4=list_1[0]
In [597]: var1
Out[597]: array(['charge'], dtype='<U6') # a string
In [598]: var2
Out[598]: array([[24.]]) # a number, (1,1) array
In [599]: var3
Out[599]:
array([[2.0080e+03, 4.0000e+00, 2.0000e+00, 1.3000e+01, 8.0000e+00,
1.7921e+01]])
var3
- матрица, здесь (1,6) числовой c массив.
In [600]: var4
Out[600]:
array([[(array([[3.87301722, 3.47939356, 4.00058782, 4.01239519, 4.01970806]]), array([[-1.20066070e-03, -4.03026848e+00, 1.51273065e+00,
1.50906328e+00, 1.51131819e+00, 1.51277913e+00,
1.51183834e+00, 1.51024540e+00, 1.50779576e+00,
1.50732203e+00, 1.51022594e+00, 1.51185336e+00]]), array([[ 0. , 2.532, 5.5 , 8.344, 11.125, 13.891, 16.672, 19.5 ,
22.282, 25.063, 27.828, 30.641, 33.453, 36.219, 39.735, 42.578]]))]],
dtype=[('Res1', 'O'), ('Rea2', 'O'), ('Res3', 'O')])
Последний является сложным; Я думаю, что это был struct
в MATLAB. Вот форма (1,1) (1 элемент, 2d), структурированный массив с 3 полями, каждое из которых содержит массивы (объект dtype).
In [601]: var4.shape
Out[601]: (1, 1)
In [602]: var4.dtype
Out[602]: dtype([('Res1', 'O'), ('Rea2', 'O'), ('Res3', 'O')])
, к которым мы можем обратиться:
In [603]: var4[0,0]['Res1']
Out[603]: array([[3.87301722, 3.47939356, 4.00058782, 4.01239519, 4.01970806]])
In [604]: var4[0,0]['Rea2']
Out[604]:
array([[-1.20066070e-03, -4.03026848e+00, 1.51273065e+00,
1.50906328e+00, 1.51131819e+00, 1.51277913e+00,
1.51183834e+00, 1.51024540e+00, 1.50779576e+00,
1.50732203e+00, 1.51022594e+00, 1.51185336e+00]])
In [605]: var4[0,0]['Res3']
Out[605]:
array([[ 0. , 2.532, 5.5 , 8.344, 11.125, 13.891, 16.672, 19.5 ,
22.282, 25.063, 27.828, 30.641, 33.453, 36.219, 39.735, 42.578]])
Единственный элемент var4
, извлеченный из (1,1) формы MATLAB:
In [631]: var4[0,0]
Out[631]:
(array([[3.87301722, 3.47939356, 4.00058782, 4.01239519, 4.01970806]]), array([[-1.20066070e-03, -4.03026848e+00, 1.51273065e+00,
1.50906328e+00, 1.51131819e+00, 1.51277913e+00,
1.51183834e+00, 1.51024540e+00, 1.50779576e+00,
1.50732203e+00, 1.51022594e+00, 1.51185336e+00]]), array([[ 0. , 2.532, 5.5 , 8.344, 11.125, 13.891, 16.672, 19.5 ,
22.282, 25.063, 27.828, 30.641, 33.453, 36.219, 39.735, 42.578]]))
Извлеките это в кортеж:
In [632]: var4[0,0].tolist()
Out[632]:
(array([[3.87301722, 3.47939356, 4.00058782, 4.01239519, 4.01970806]]),
array([[-1.20066070e-03, -4.03026848e+00, 1.51273065e+00,
1.50906328e+00, 1.51131819e+00, 1.51277913e+00,
1.51183834e+00, 1.51024540e+00, 1.50779576e+00,
1.50732203e+00, 1.51022594e+00, 1.51185336e+00]]),
array([[ 0. , 2.532, 5.5 , 8.344, 11.125, 13.891, 16.672, 19.5 ,
22.282, 25.063, 27.828, 30.641, 33.453, 36.219, 39.735, 42.578]]))
In [633]: type(_)
Out[633]: tuple
Без [0,0] tolist
даст нам пару уровней вложенности списка, [[(....)]]
.
Имена структурированных массивов:
In [634]: var4.dtype.names
Out[634]: ('Res1', 'Rea2', 'Res3')
и словарь, объединяющий эти имена и массивы в [632]:
In [636]: dd = {name:val for name, val in zip(var4.dtype.names, var4[0,0].tolist())}
In [637]: dd
Out[637]:
{'Res1': array([[3.87301722, 3.47939356, 4.00058782, 4.01239519, 4.01970806]]),
'Rea2': array([[-1.20066070e-03, -4.03026848e+00, 1.51273065e+00,
1.50906328e+00, 1.51131819e+00, 1.51277913e+00,
1.51183834e+00, 1.51024540e+00, 1.50779576e+00,
1.50732203e+00, 1.51022594e+00, 1.51185336e+00]]),
'Res3': array([[ 0. , 2.532, 5.5 , 8.344, 11.125, 13.891, 16.672, 19.5 ,
22.282, 25.063, 27.828, 30.641, 33.453, 36.219, 39.735, 42.578]])}
In [638]: dd["Rea2"]
Out[638]:
array([[-1.20066070e-03, -4.03026848e+00, 1.51273065e+00,
1.50906328e+00, 1.51131819e+00, 1.51277913e+00,
1.51183834e+00, 1.51024540e+00, 1.50779576e+00,
1.50732203e+00, 1.51022594e+00, 1.51185336e+00]])
Сравните этот последний доступ с In[604]
. То же самое, немного другое индексирование.