2016-01-06 5 views
0

Я работаю на Python, но исходя из R-фона - где, если я хочу взять массив строк x = ['1', '2', '3'] и получить соответствующий массив целых чисел [1, 2, 3], естественное, что нужно сделать чтобы запустить что-то вроде int(x). Конечно, этот синтаксис не работает, потому что я нахожусь в Python, и функции не являются автоматически векторизованными. Похоже, что я могу использовать NumPy для создания векторизованной версии функций, но это похоже на говорящий Python в очень тяжелом акценте R.Pythonic альтернатива векторизованным функциям R

Looping над содержимым вектора работы

x2 = [] 
for y in x: 
    x2.append(int(y)) 

, но, кажется, не совсем элегантно - это строительство три линии что-то я мог бы сделать в шесть символов в R. Конечно, есть Pythonic способ сделать это более компактным? Или это связано с соответствующими сильными и слабыми сторонами Python против R?

+1

Поиск «питон список понимания» –

+2

Там причина Python называет их «списками», а не «векторы». Numpy - это абсолютно способ пойти, если то, что вы хотите сделать, - это векторизованные числовые операции. – BrenBarn

ответ

2

Вы должны использовать библиотеку numpy и, возможно, другие библиотеки на ее основе, такие как pandas. Если то, что вы хотите сделать, это векторизованные числовые операции, это способ сделать это.

Вы правы таким образом, что вы натыкаетесь на сильные и слабые стороны двух языков. В R все это вектор, даже одиночные числовые значения. Это делает операции векторизации легкими, но может затруднить что-либо, где вы находитесь не хотите, чтобы векторизованные численные вычисления. Python обладает большей гибкостью благодаря тому, что не создает такие вещи, как векторизация, в основные типы языков; вы все равно можете это сделать, но вам нужна библиотека

Другими словами, сила R состоит в том, что все векторизовано и слабость состоит в том, что все векторизовано; сила Python заключается в том, что по умолчанию не векторизованные объекты, а слабость в том, что вещи по умолчанию не векторизованы. Использование numpy для выполнения векторизованных операций - это не столько «Python с акцентом R», сколько «Python с векторным акцентом», что именно вы хотите, если вы хотите использовать векторизованные операции. Если вы делаете много статистики, вы можете найти сильные стороны R. По моему опыту, если вы делаете почти ничего, кроме статистики, вы обнаружите, что Python гораздо более адаптируется к множеству задач.

3

Вы можете использовать map

>>> lst = ['1', '2', '3'] 
>>> map(int, lst) 
[1, 2, 3] 

или список понимание:

>>> [int(x) for x in lst] 
[1, 2, 3] 

Какой из них использовать? В первую очередь основывается на мнениях. Лично я предпочитаю map, если отображаемая функция уже существует как встроенная. Обратите внимание, что в Python3, map будет отображаться объект карты, который - если вы хотите иметь список - вам нужно будет отображать его явно. Таким образом, понимание, вероятно, предпочли в Python3:

>>> result = map(int, ['1', '2', '3']) 
>>> result 
<map object at 0x7f35c4c3af98> 
>>> list(result) 
[1, 2, 3] 
1

Вы можете использовать список понимание:

x = ['1', '2', '3'] 
l = [int(i) for i in x] 
print(l) 
[1, 2, 3] 

Если вы собираетесь использовать что-то комплекс с векторами, dataframes вы должны проверить numpy, pandas и scipy библиотеки ,

1

Я настоятельно рекомендую использовать numpy для работы с векторными данными.Именно для этого он и есть. Это очень зрелая библиотека, широко используемая другими библиотеками и не имеющая ничего общего с «говорящим Python в очень тяжелом акценте R».

Альтернативы для данного конкретного примера будет список понимание:

[int(e) for e in x] 
Смежные вопросы