@ Ответ Гнибблера технически корректен, но нет никаких оснований для создания исходного массива storecoeffs
. Просто загрузите ваши значения, а затем создайте массив из них. Однако, как заметил @Mermoz, ваш вариант использования выглядит достаточно простым для numpy.loadtxt ().
Кроме того, почему вы используете массив объектов ?? Это, вероятно, не то, что вы хотите ... Прямо сейчас, вы храните числовые значения в виде строк, а не с плавающей точкой!
По сути, у вас есть два способа обработки ваших данных. Если вы хотите легкий доступ к именованным столбцам, используйте структурированный массив (или массив записей). Если вы хотите иметь «нормальный» многомерный массив, просто используйте массив чисел с плавающей запятой, целых и т. Д. Объектные массивы имеют определенное назначение, но, вероятно, это не то, что вы делаете.
Например:
Чтобы просто загрузить данные в виде обычного двумерного массива (при условии, что все ваши данные можно легко представить в виде числа с плавающей запятой):
import numpy as np
# Note that this ignores your column names, and attempts to
# convert all values to a float...
data = np.loadtxt('input_filename.txt', delimiter=',', skiprows=1)
# Access the first column
workers = data[:,0]
Чтобы загрузить данные в виде структурированного массива, вы можете сделать что-то вроде этого:
import numpy as np
infile = file('input_filename.txt')
# Read in the names of the columns from the first row...
names = infile.next().strip().split()
# Make a dtype from these names...
dtype = {'names':names, 'formats':len(names)*[np.float]}
# Read the data in...
data = np.loadtxt(infile, dtype=dtype, delimiter=',')
# Note that data is now effectively 1-dimensional. To access a column,
# index it by name
workers = data['workers']
# Note that this is now one-dimensional... You can't treat it like a 2D array
data[1:10, 3:5] # <-- Raises an error!
data[1:10][['inc1', 'inc2']] # <-- Effectively the same thing, but works..
Если у вас есть нечисловые значения в ваших данных и вы хотите обрабатывать их как строки, вам нужно использовать структурированный массив, указать, какие поля вы хотите быть строками, и установить максимальную длину для строк в поле.
Исходя из ваших примеров данных, он выглядит как первый столбец, «работники» - это не числовое значение, которое вы можете сохранить в виде строки, а все остальные выглядят как числа с плавающей точкой. В этом случае вы бы сделали что-то вроде этого:
import numpy as np
infile = file('input_filename.txt')
names = infile.next().strip().split()
# Create the dtype... The 'S10' indicates a string field with a length of 10
dtype = {'names':names, 'formats':['S10'] + (len(names) - 1)*[np.float]}
data = np.loadtxt(infile, dtype=dtype, delimiter=',')
# The "workers" field is now a string array
print data['workers']
# Compare this to the other fields
print data['constant']
Если есть случаи, когда вам действительно нужна гибкость модуля csv (например, текстовые поля с запятыми), вы можете использовать его для чтения данных, а затем преобразовать его в структурированный массив с соответствующим типом dtype.
Надеюсь, это немного прояснит ситуацию ...