0

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 メソッドが実装されていない場合、問題は発生しません。

シャッフル機能で何が起こっているのですか?これはバグですか?関数の使い方が間違っていますか?

4

1 に答える 1

0

メインリストをシャッフルしたいだけの場合は、次を使用できます

import random
random.shuffle(dataset) 
于 2013-02-19T05:04:34.693 に答える