numpy.random.shuffle 関数の挙動がおかしくて困っています。インスタンスに属性を追加しましたが、シャッフル後に消去されます。
問題を示すコードは次のとおりです。
#I'm making a class of time series.
class TimeSeries(object):
def __init__(self, data):
self.data = data
self.num_points = len(self.data)
def __getitem__(self, key):
return self.data[key]
def __len__(self):
return self.num_points
dataset = [TimeSeries(numpy.random.random((10,3))) for _ in range(100)]
#Add new attribute
for ts in dataset:
ts.weight = 1
dataset[0].weight #returns 1
numpy.random.shuffle(dataset)
dataset[0].weight #'numpy.ndarray' object has no attribute 'weight'
重み属性を残しておきたいのですが、シャッフル後に削除してしまいました。私はいくつかの試験を行いました。私が見つけたものは次のとおりです。
- データ セットが小さい場合、問題は発生しません。(例: range(100) >> range(3))
- IDはシャッフル後に変更されます。
- getitem、len メソッドが実装されていない場合、問題は発生しません。
シャッフル機能で何が起こっているのですか?これはバグですか?関数の使い方が間違っていますか?