Разница между numpy.genfromtxt и numpy.loadtxt и распаковка

Мне любопытно узнать разницу между двумя функциями, упомянутыми в заголовке этой темы. На веб-сайте, содержащем документацию, написано: "numpy.loadtxt [является] [эквивалентной] функцией, когда данные отсутствуют". Что именно подразумевается под этим? Означает ли это, например, что если у меня есть CSV файл с пустым столбцом между двумя столбцами, содержащими данные, я не должен numpy.loadtxt.

Кроме того, что это значит,

"unpack : bool, optional
If True, the returned array is transposed, so that arguments may be unpacked using x, y, z = loadtxt(...)"

Я не совсем уверен, что это значит.

Буду признателен за вашу помощь, спасибо!

Ответ 1

Вы правы. Использование np.genfromtxt дает вам некоторые параметры, такие как параметры missing_values, filling_values, которые могут помочь вам справиться с неполным csv. Пример:

1,2,,,5
6,,8,,
11,,,,

Можно прочитать с помощью:

filling_values = (111, 222, 333, 444, 555) # one for each column
np.genfromtxt(filename, delimiter=',', filling_values=filling_values) 
#array([[   1.,    2.,  333.,  444.,    5.],
#       [   6.,  222.,    8.,  444.,  555.],
#       [  11.,  222.,  333.,  444.,  555.]])

Параметр unpack полезен, если вы хотите поместить каждый столбец текстового файла в другую переменную. Например, у вас есть текстовый файл со столбцами x, y, z, а затем:

x, y, z = np.loadtxt(filename, unpack=True)

Обратите внимание, что это работает так же, как

x, y, z = np.loadtxt(filename).T

По умолчанию итерация по 2-мерному массиву означает итерацию по строкам, поэтому вам нужно транспонировать или использовать unpack=True в этом примере.