Разбить 2D массив строк NumPy на символ "," - PullRequest
0 голосов
/ 22 мая 2018

У меня есть двумерный массив строк NumPy, например: a = array([['1,2,3'], ['3,4,5']], dtype=object), и я хотел бы преобразовать его в двумерный массив Numpy следующим образом: a = array([['1','2','3'], ['4','5','6']]).Затем я хотел бы также преобразовать строки в числа с плавающей точкой, чтобы окончательный массив выглядел так: a = array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]).Любая помощь с благодарностью.

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Выполните итерацию по строкам и используйте split(','), чтобы разделить каждую строку запятыми и поместить результат в новый массив с числовым типом данных:

import numpy as np

a = np.array([['1,2,3'], ['3,4,5']])
b = np.array([x[0].split(',') for x in a], dtype=np.float32)
print(b)

#[[ 1.  2.  3.]
# [ 3.  4.  5.]]                                          
0 голосов
/ 22 мая 2018

Так как это массив объектов, мы могли бы итерировать и использовать простое разбиение Python:

In [118]: a = np.array([['1,2,3'], ['3,4,5']], dtype=object)
In [119]: a.shape
Out[119]: (2, 1)
In [120]: np.array([x.split(',') for x in a.ravel()])
Out[120]: 
array([['1', '2', '3'],
       ['3', '4', '5']], dtype='<U1')
In [122]: np.array([x.split(',') for x in a.ravel()],dtype=float)
Out[122]: 
array([[1., 2., 3.],
       [3., 4., 5.]])

Я упростил его, чтобы упростить итерацию.Кроме того, результат не нуждается во втором измерении размера 1.

Существует функция np.char, которая применяет split к элементам массива, но результат сложнее:

In [129]: a.astype(str)
Out[129]: 
array([['1,2,3'],
       ['3,4,5']], dtype='<U5')
In [130]: np.char.split(_, sep=',')
Out[130]: 
array([[list(['1', '2', '3'])],
       [list(['3', '4', '5'])]], dtype=object)
In [138]: np.stack(Out[130].ravel()).astype(float)
Out[138]: 
array([[1., 2., 3.],
       [3., 4., 5.]])

Другой способ:

In [132]: f = np.frompyfunc(lambda astr: np.array(astr.split(','),float),1,1)
In [133]: f(a)
Out[133]: 
array([[array([1., 2., 3.])],
       [array([3., 4., 5.])]], dtype=object)
In [136]: np.stack(_.ravel())
Out[136]: 
array([[1., 2., 3.],
       [3., 4., 5.]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...