我正在寫這個類來規範數組中的數據。當我使用self.x上的範數函數返回規範化的矩陣時,self.x會被覆蓋。類內Python範圍
不知道爲什麼self.x矩陣覆蓋掉了:
class normData():
def __init__(self, file):
self.file = file
self.data = self.readtxt()
self.x = self.data[:,0:-1]
self.y = self.data[:,-1]
# self.y_norm = self.norm(self.y)
# self.x_norm = self.norm(self.x)
def readtxt(self):
arr = []
data = open(self.file, 'r')
for line in data.readlines():
point = line.split(',')
arr.append([float(point[i]) for i in range(len(point))])
arr = np.append(np.ones([len(arr),1]),arr,1)
return arr
def norm(self, matrix):
mat = matrix
col_num = len(mat[0])
row_num = len(mat)
mu = np.array([np.average(mat[:,i]) for i in range(col_num)])
size = np.array([max(mat[:,i])-min(mat[:,i]) for i in range(col_num)])
for i in range(len(size)):
if (size[i] > 0.00001):
mat[:,i]=(mat[:,i]-mu[i])/size[i]
return mat
我的猜測是可變的「墊子」被作爲對象「矩陣」(self.x傳入規範),在內存中,並且然後覆蓋?
編輯/問題澄清:避免覆蓋python類結構中現有數據的最佳方法是什麼?
如果在Python類結構中不起作用 –
?可以使用'.copy()'或者'import deepcopy'「:該類與它無關。更多的事實是,賦值並不總是複製東西(當使用'='時,引用列表和numpy數組,而不是複製)。 – Evert