Как я могу сделать условную арифметику массива на массиве NumPy? - PullRequest
12 голосов
/ 04 августа 2010

Я пытаюсь лучше справиться с массивами numpy, поэтому у меня есть типовой вопрос, чтобы спросить о них:

Скажем, у меня есть массив numpy с именем a.Я хочу выполнить операцию над a, которая увеличивает все значения внутри него, которые меньше 0, а остальные оставляются в покое.например, если бы у меня было:

a = np.array([1,2,3,-1,-2,-3])

Я бы хотел вернуть:

([1,2,3,0,-1,-2])

Какой самый компактный синтаксис для этого?

Спасибо!

Ответы [ 3 ]

32 голосов
/ 05 августа 2010
In [45]: a = np.array([1,2,3,-1,-2,-3])

In [46]: a[a<0]+=1

In [47]: a
Out[47]: array([ 1,  2,  3,  0, -1, -2])
10 голосов
/ 05 августа 2010

Чтобы изменить его:

a[a<0] += 1

Чтобы оставить исходный массив в покое:

a+[a<0]
0 голосов
/ 06 июля 2019

Просто чтобы добавить выше, в массиве numpy я хотел вычесть значение, основанное на значении ascii, чтобы получить значение от 0 до 35 для ascii 0-9 и AZ, и должен был написать циклы for, но пост выше показал мне, как сделать это коротким. Так что я подумал о том, чтобы опубликовать это здесь, благодаря посту выше.

Код ниже можно сделать коротким

i = 0
for y in y_train:
    if y < 58:
        y_train[i] = y_train[i]-48
    else :
        y_train[i] = y_train[i] - 55
    i += 1
i = 0
for y in y_test:
    if y < 58:
        y_test[i] = y_test[i]-48
    else :
        y_test[i] = y_test[i] - 55
    i += 1
# The shortened code is below
y_train[y_train < 58] -= 48
y_train[y_train > 64] -= 55

y_test[y_test < 58] -= 48
y_test[y_test > 64] -= 55
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...