Я пытаюсь изменить порядок матрицы X через класс P, который уже передан функции в базовом классе B. Изменение порядка не отражается в базовом классе B. Есть ли способ достичь этого? Пожалуйста, смотрите следующее MWE:
#p.py
import numpy as np
import b
class P(b.B):
def __init__(self, opts):
self.opts = opts
def func1(self, X):
print('func1:',X)
def func2(self):
randomize = np.arange(len(self.myX))
np.random.shuffle(randomize)
self.myX = self.myX[randomize]
print('func2',self.myX)
def func3(self, X):
"""
X is a 2d matrix
"""
self.myX = X
#call the function from the base class
b.B.func3(self, self.myX)
#b.py
class B:
"""
base class.
"""
def __init__(self, opts):
self.opts = opts
def func3(self, X):
for n in range(2):
for i in range(X.shape[0]):
self.func1(X[i])
self.func2()
с консоли:
p1 = p.P({})
X=np.array([[1,2,3], [2,3,4], [3,4,5], [4,5,6], [5,6,7], [6,7,8]])
p1.func3(X)
Токовый выход:
func1: [1 2 3]
func1: [2 3 4]
func1: [3 4 5]
func1: [4 5 6]
func1: [5 6 7]
func1: [6 7 8]
func2 [[6 7 8]
[3 4 5]
[2 3 4]
[5 6 7]
[4 5 6]
[1 2 3]]
func1: [1 2 3]
func1: [2 3 4]
func1: [3 4 5]
func1: [4 5 6]
func1: [5 6 7]
func1: [6 7 8]
Ожидаемый результат:
func1: [1 2 3]
func1: [2 3 4]
func1: [3 4 5]
func1: [4 5 6]
func1: [5 6 7]
func1: [6 7 8]
func2 [[6 7 8]
[3 4 5]
[2 3 4]
[5 6 7]
[4 5 6]
[1 2 3]]
func1: [6 7 8]
func1: [3 4 5]
func1: [2 3 4]
func1: [5 6 7]
func1: [4 5 6]
func1: [1 2 3]
Таким образом, в основном, когда элемент управления возвращается из p.func2 в func3 в B, X должен совпадать с self.myX. Я считаю, что это должно произойти, потому что self.myX по умолчанию передается по ссылке на b.func3.