Я замечаю неожиданные результаты при применении фильтрации индекса к массиву numpy (b[b < 3] = 0
). Для любой переменной, которая была назначена из или для фильтруемой переменной, будет применен тот же фильтр, т. Е. Если b = a
, a
будет отфильтрован тот же фильтр, что и b
.
Я создал тестовый файл, чтобы увидеть, на какие переменные влияют, когда к переменной применяется фильтрация индекса. Я выполнил приведенный ниже код с результатами, полученными в соответствии с тем, что я ожидал получить.
import numpy as np
class tester1(object):
def __init__(self):
self.a = np.array([[1, 2, 3], [4, 5, 6]])
self.b = []
self.c = []
self.d = []
def test1(self):
self.b = self.a
self.c = self.b
self.d = self.c
d = self.d
e = d
d[d < 3] = 0
print('self.a')
print(self.a)
print('self.b')
print(self.b)
print('self.c')
print(self.c)
print('d')
print(d)
print('e')
print(e)
class tester2(object):
def __init__(self):
self.d = np.array([[1, 2, 3], [4, 5, 6]])
self.e = []
self.t = tester1()
self.t.test1()
def test2(self):
self.t.b = self.d
self.t.c = self.t.b
self.e = self.t.b
self.t.b[self.t.b < 3] = 0
print('self.t.b')
print(self.t.b)
print('self.t.c')
print(self.t.c)
print('self.d')
print(self.d)
print('self.e')
print(self.e)
def test3(self):
print('self.d')
print(self.d)
self.e = self.d
a = np.array([[False, False, False], [False, True, True]])
f = self.d
f[a] = 0
print('self.d')
print(self.d)
print('self.e')
print(self.e)
print('f')
print(f)
def test4(self):
a = self.t.a
b = a
c = b
c[c > 4] = 2
print('self.t.a')
print(self.t.a)
print('b')
print(b)
print('c')
print(c)
Класс показал результаты сверху, а ожидаемые результаты - снизу.
когда я бегу t = tester2()
self.a [[0 0 3] [4 5 6]] # Actual
self.a [[1 2 3] [4 5 6]] # Expected
self.b [[0 0 3] [4 5 6]]
self.b [[1 2 3] [4 5 6]]
self.c [[0 0 3] [4 5 6]]
self.c [[1 2 3] [4 5 6]]
d [[0 0 3] [4 5 6]]
d [[0 0 3] [4 5 6]]
e [[0 0 3] [4 5 6]]
e [[1 2 3] [4 5 6]]
Когда я бегу t.test2()
self.t.b [[0 0 3] [4 5 6]] # Actual
self.t.b [[0 0 3] [4 5 6]] # Expected
self.t.c [[0 0 3] [4 5 6]]
self.t.c [[1 2 3] [4 5 6]]
self.d [[0 0 3] [4 5 6]]
self.d [[1 2 3] [4 5 6]]
self.e [[0 0 3] [4 5 6]]
self.e [[1 2 3] [4 5 6]]
Когда я бегу t.test3()
self.d [[0 0 3] [4 5 6]] # Actual
self.d [[1 2 3] [4 5 6]] # Expected
self.d [[0 0 3] [4 0 0]]
self.d [[1 2 3] [4 5 6]]
self.e [[0 0 3] [4 0 0]]
self.e [[1 2 3] [4 5 6]]
f [[0 0 3] [4 0 0]]
f [[1 2 3] [4 0 0]]
Когда я бегу t.test4()
self.t.a [[0 0 3] [4 2 2]] # Actual
self.t.a [[1 2 3] [4 5 6]] # Expected
b [[0 0 3] [4 2 2]]
b [[1 2 3] [4 5 6]]
c [[0 0 3] [4 2 2]]
c [[1 2 3] [4 2 2]]