Итерируя по строкам в массиве NumPy, как правильно позаботиться об этом одномерном и двумерном случае, где я хочу, чтобы одномерный индекс обрабатывался как целая строка для индексации? - PullRequest
1 голос
/ 21 января 2020

У меня есть серия csv файлов, которые я использую NumPy genfromtxt, чтобы превратить их в массивы. Каждый из них имеет следующий формат:

ColA, ColB, ColC
  -2, 10,   10
  -1, 10,   10
   0, 10,   10
   1, 10,   10
   2, 10,   10

В случае вышеупомянутого csv использование genfromtxt(data.csv, delimeter=',', skip_header=1) создаст массив с формой (5, 3). Затем я могу выполнить итерацию по каждой строке, например:

data_array = np.genfromtxt(data.csv, delimeter=',', skip_header=1)

for row in data_array:
    some_function(row[0], row[1], row[2])

, где функция в l oop ожидает и требует трех чисел. Это разбивается, когда csv содержит только одну строку данных, то есть:

ColA, ColB, ColC,
   0,   -4,   10, 

В этом случае for row in data_array будет интерпретироваться как взгляд на каждое число в (1, 3) -образной форме массив индивидуально, и поэтому я не могу запустить функцию на нем. У меня есть данные из csv файлов, которые могут содержать или не содержать более одной строки данных. Как правильно обработать это, чтобы some_function(x, y, z) всегда можно было завершить, независимо от входного массива? Я мог бы сделать заявление if, чтобы проверить, является ли массив 1D, но кажется, что есть лучший способ go об этом.

1 Ответ

1 голос
/ 21 января 2020

Вы можете использовать np.reshape с подстановочным знаком (-1), чтобы данные были массивом 2d:

data_array = np.genfromtxt("data.csv", delimiter=',', skip_header=1).reshape(-1,3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...