Инвертировать значения в срезе numpy - PullRequest
0 голосов
/ 02 мая 2020

Допустим, у меня есть массив нулей и единиц. Когда я получу фрагмент, как я могу инвертировать значения?

Вот что у меня есть:

import numpy as np

a = np.zeros((10,10))

x1,x2 = (4,4)
y1,y2 = (6,6)

# set some ones
a[x1:y1,x2:y2] = 1

# get a slice or view
v = a[x1:y1,x2:y2]

# invert values
v = 1-v

# somehow the values assigned in the 'v' don't appear in 'a'?
print(a)

1 Ответ

2 голосов
/ 02 мая 2020

Следуя комментариям Divakar, вы можете использовать встроенную функцию id , чтобы проверить, отличаются ли две переменные v, и numpy .may_share_memory , чтобы проверить, и когда a и v совместно используют память:

import numpy as np

a = np.zeros((10,10))
x1,x2 = (4,4)
y1,y2 = (6,6)

a[x1:y1,x2:y2] = 1

v = a[x1:y1,x2:y2]
print(id(v), np.may_share_memory(a,v))
#259977568 True

v = 1-v
print(id(v), np.may_share_memory(a,v))
# 259979728 False

При изменении существующего v в соответствии с предложением вы получите:

v = a[x1:y1,x2:y2]
print(id(v), np.may_share_memory(a,v))
# 259978968 True

v[:] = 1-v
print(id(v), np.may_share_memory(a,v))
# 259978968 True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...