目录
我的需求背景:
发现问题:
解决方式:
我的需求背景:
两个分类标签的数据独立成组,使用np.vstack拼接到一起后,希望打乱行的顺序。
#合并SD和USD标签的数据
finalData = np.vstack((data0,data1))
finalData.shape
(1518, 23)
初步尝试:
网络搜索后,使用random.shuffle()貌似可以满足需求。参考:Python3 shuffle() 函数
import random
random.shuffle(finalData)
print(finalData)
但个人使用过程发现存在一些问题。
发现问题:
1、存在某些行重复出现的问题。我是23列的数据,最后一列为数据标签(0,1),实验数据本身的重复可能性较小。重复详情见图。
2、从上图不难发现,数据标签并不是我期待的结果:在0-1大致五五开的情况下(在前后两部分),前30行都是0标签而没有1标签。
综上推测:random.shuffle在二维数组中的随机,可能是在新数组的每一行,以正态概率或其他方式随机选取原数组的一个Index写入。此处验证留空,可查询源码了解。
上述问题不知道是否可以通过设置参数解决。
解决方式:
既然random.shuffle()存在问题,那么是否有其他方式进行数组顺利的打乱呢?
1、python自带的random和numpy的random。
虽然平时有用random函数,但没有关心过python自带的random和np的random有什么不同。数组以外的差别可以参考简书:【python】random与numpy.random
我这里希望打乱二维数组顺序,关注到np.random中也有上文所用的函数,既然操作是array又有自家的函数,不妨一试。
#打乱数组顺序
np.random.shuffle(finalData)
这个feel感觉就棒棒哒了。
2、 np.random.shuffle(x)和np.random.permutation(x):是否返回新数组?
numpy.random.shuffle(x)函数通过混洗其内容来就地修改序列,返回值None;numpy.random.permutation(x)会返回一个新的数组而不修改原数组。
至此个人的需求已得到满足,虽还有更多值得探究的细节,但需求产生时再来追究,问题驱动学习,嘿嘿。