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'

我想保留 weight 属性,但在洗牌后删除。我做了一些试验。我发现的是:

  • 如果数据集很小,问题就不会发生。(例如范围(100)>>范围(3))
  • 洗牌后ID会发生变化。
  • 如果 getitem, len 方法没有实现,问题就不会发生。

随机播放功能发生了什么?这是一个错误吗?我使用该功能是错误的方式吗?

4

1 回答 1

0

如果你只想洗牌主列表,你可以使用

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