Если по какой-либо причине вы хотели сделать это вручную (без использования модуля, такого как csv
, pandas
, numpy
и т. д.):
with open('myfile.csv','w') as f:
for sublist in mylist:
for item in sublist:
f.write(item + ',')
f.write('\n')
Конечно, версия может быть подвержена ошибкам и неэффективна ... обычно для этого есть модуль. Но иногда писать свои собственные могут помочь вам понять, как они работают, а иногда просто проще.
Почему вы ожидаете, что они сделают то же самое? numpy
отличается от MATLAB таким индексированием.
In [6]: arr = np.arange(9).reshape(3,3)
In [7]: arr[range(3),range(3)]
Out[7]: array([0, 4, 8])
С диапазоном (или списком или массивом с одинаковыми значениями) он возвращает массив 1d, в данном случае диагональ массива 2d. Эта индексация выбирает набор точек, а не блок.
В numpy
, если вы хотите получить двумерный результат с «расширенной индексацией», вам нужно создать пару индексных массивов, которые вместе передают правильную форму:
In [8]: arr[np.arange(3)[:,None],range(3)]
Out[8]:
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
В MATLAB / octave легко выбрать блок, но гораздо сложнее выделить отдельные элементы.
arr(sub2ind([3,3],[1,2,3],[1,2,3]))
В общем, чтобы понять numpy
расширенное индексирование, вам нужно понимать широковещательную рассылку, которая относится к индексированию, а также к математическим операциям, таким как сложение.