【问题标题】:How did the number of elements in each array end up being less than they were in their parent array (array of arrays)每个数组中的元素数量如何最终少于其父数组(数组数组)中的元素数量
【发布时间】:2021-03-14 17:36:46
【问题描述】:

当我不使用 shuffle(train_data) 时,这个问题似乎消失了。我也试过分别做 shuffle(train_data_1)shuffle(train_data_2) 但在这种情况下,分布似乎也发生了变化。

import numpy as np
import pandas as pd
from collections import Counter
from random import shuffle

train_data_1 = np.load('training_data_v1.npy', allow_pickle=True)
train_data_2 = np.load('training_data_v2.npy', allow_pickle=True)

train_data = np.vstack((train_data_1, train_data_2))

df = pd.DataFrame(train_data)
print(df.head())
print(Counter(df[1].apply(str)))
Output :
                                                 0          1
0  [[33, 255, 255, 255, 255, 255, 255, 255, 255, ...  [0, 1, 0]
1  [[33, 255, 255, 255, 255, 255, 255, 255, 255, ...  [0, 1, 0]
2  [[33, 255, 255, 255, 255, 255, 255, 255, 255, ...  [0, 1, 0]
3  [[33, 255, 255, 255, 255, 255, 255, 255, 255, ...  [0, 1, 0]
4  [[33, 255, 255, 255, 255, 255, 255, 255, 255, ...  [0, 1, 0]
Counter({'[0, 1, 0]': 6064, '[1, 0, 0]': 542, '[0, 0, 1]': 394})

将前、左、右分离到各自的数组中

shuffle(train_data)
lefts = []
rights = []
forwards = []

for data in train_data:
    img = data[0]
    choice = data[1]

    if choice == [1,0,0]:
        lefts.append([img,choice])
    elif choice == [0,1,0]:
        forwards.append([img,choice])
    elif choice == [0,0,1]:
        rights.append([img,choice])
    else:
        print('no matches')

print (len(forwards), len(lefts), len(rights))
Output:
6086 763 151

一开始前、左、右的分布是(6064,542,394)

现在是 (6096, 763, 151)

分布发生了怎样的变化?

我做错了什么!?

【问题讨论】:

  • 没有看到train_data就不清楚你在做什么。您是否 100% 确定 train_data 与创建的 df 完全相同,无论如何,也许希望从 df 而不是 train_data 构建您的前、左和右。 iterrows() 是一种类似于您尝试过的方法。
  • 不,这不是问题。 random.shuffle() 似乎是问题
  • 请发布 MCVE。我可以复制的东西。我不相信您对 shuffle 的评估是问题所在,但我无法用您提供的内容对其进行测试。
  • 我在分成前、左、右后使用了随机播放。现在没有任何问题,数据保存在正确的分布中

标签: python arrays pandas numpy dataframe


【解决方案1】:

在形成前、左、右数组后不要使用shuffle(train_data),而是单独对它们使用shuffle()。

shuffle(forwards)
shuffle(lefts)
shuffle(rights)

现在分配没有任何问题,洗牌也正确执行。

【讨论】:

    猜你喜欢
    • 2016-07-19
    • 1970-01-01
    • 2015-11-02
    • 2012-11-09
    • 2017-02-02
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多