Python打乱二维数组顺序:个人使用经历

目录

 

我的需求背景:

发现问题:

解决方式:


我的需求背景:

 

两个分类标签的数据独立成组,使用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),实验数据本身的重复可能性较小。重复详情见图。

Python打乱二维数组顺序:个人使用经历_第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)

Python打乱二维数组顺序:个人使用经历_第2张图片

这个feel感觉就棒棒哒了。

2、 np.random.shuffle(x)和np.random.permutation(x):是否返回新数组?

numpy.random.shuffle(x)函数通过混洗其内容来就地修改序列,返回值None;numpy.random.permutation(x)会返回一个新的数组而不修改原数组。

至此个人的需求已得到满足,虽还有更多值得探究的细节,但需求产生时再来追究,问题驱动学习,嘿嘿。

 

你可能感兴趣的:(机器学习,python)