С двумя заданными вами списками (вы пишете о arrays
, но копирование-вставка вашего кода создает списки):
In [30]: S = [23, 23.3, 34.2, 235, 23.1, 32.1, 23, 75, 4]
...: frames = [1, 2, 3, 4, 5, 6, 7, 8, 9]
In [31]: for i in frames:
...: print(S[:,i])
...:
TypeError: list indices must be integers or slices, not tuple
Вы не можете использовать [:,i]
индексирование сlists.
In [32]: for i in frames:
...: print(S[i])
..:
23.3
34.2
235
23.1
32.1
23
75
4
---------------------------------------------------------------------------
IndexError: list index out of range
С frames
вы пропускаете первый элемент S
и получаете ошибку с последним индексом.Индексирование Python начинается с 0!
Даже если я создаю пустой массив, ваша индексация неверна:
In [33]: arr = np.array(S)
In [34]: for i in frames:
...: print(arr[:,i])
...:
IndexError: too many indices for array
arr
равен 1d, shape (9,).Вы не можете использовать [:, i] `с этим.
Вы хотите выбрать часть S
(или arr
), например, первые 3 элемента?
In [36]: arr[:3]
Out[36]: array([23. , 23.3, 34.2])
In [37]: np.log(arr[:3])
Out[37]: array([3.13549422, 3.14845336, 3.53222564])
[:3]
индексы a slice
(как для списка, так и для массивов)
Если массив 2d, то вы можете использовать запись [:,i]
:
In [38]: A = arr.reshape(3,3)
In [39]: A
Out[39]:
array([[ 23. , 23.3, 34.2],
[235. , 23.1, 32.1],
[ 23. , 75. , 4. ]])
In [40]: A[:,0] # first column
Out[40]: array([ 23., 235., 23.])