Создание 2D матриц из нескольких файлов CSV - PullRequest
0 голосов
/ 11 сентября 2018

Я работаю с Python3, и я хотел бы загрузить данные из нескольких файлов CSV. Каждый CSV (одно измерение) имеет 3 столбца (3 разные физические величины).Я хочу загрузить каждое количество по 3 отдельным переменным.Для одного файла CSV это довольно просто, я использовал:

TIME,CH1,CH2 = loadtxt(file_path,usecols=(3,4,5),delimiter=',',skiprows=2,unpack=True)

, и он работал нормально.Теперь Я хотел бы расширить эту процедуру, чтобы я мог загрузить несколько файлов CSV .Каждый массив будет 2D, каждый столбец представляет один файл CSV.Вместо нескольких CSV с тремя переменными у меня будет 3 2D массива, что гораздо удобнее для анализа данных.

Я подумал, что могу попробовать что-то вроде этого:

TIME = matrix(zeros((20480,len(file_path)))) # 20480 length of each column
CH1 = matrix(zeros((20480,len(file_path)))) # len(file_path) number of CSV files
CH2 = matrix(zeros((20480,len(file_path))))
for k in range(0,len(file_path)): # reading each CSV file
    TIME[:,k],CH1[:,k],CH2[:,k] = loadtxt(file_path[k],usecols=(3,4,5),delimiter=',',skiprows=2,unpack=True)

Ноэто говорит мне:

ValueError: could not broadcast input array from shape (20480) into shape (20480,1)

В конце я хотел бы, чтобы переменные выглядели так:

TIME = matrix([[0., 0., 0.],
               [0., 0., 0.],
               [0., 0., 0.],
               ...,
               [0., 0., 0.],
               [0., 0., 0.],
               [0., 0., 0.]])

Каждый столбец из одного отдельного файла CSV.

Я думаю, что это довольно обычная проблема, но я не совсем понимаю, как работают массивы в Python.Я получил эту идею от Matlab, которая довольно проста, но здесь я не знаю, почему не работает индексирование массивов с помощью TIME [:] [:].

У вас есть идеи, как я мог это сделать?Спасибо.

1 Ответ

0 голосов
/ 11 сентября 2018

Используйте np.array, а не np.matrix

Я не могу подчеркнуть это достаточно.np.matrix существует только по наследству.См. этот ответ для объяснения разницы.np.matrix требует 2 измерения, а np.array допускает одно измерение при индексации.Похоже, это источник вашей ошибки.

Вот минимальный пример, демонстрирующий наблюдаемое вами поведение:

A = np.array([[1, 2, 3], [4, 5, 6]])
B = np.matrix(A)

print(A[:, 0].shape)  # (2,)
print(B[:, 0].shape)  # (2, 1)

Поэтому определите ваши результирующие массивы как np.array объекты:

m = 20480
n = len(file_path)
shape = (m, n)

TIME = np.zeros(shape)
CH1 = np.zeros(shape)
CH2 = np.zeros(shape)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...