如何随机打乱数组行索引?数组形状为(100,784)、float类型
仅打乱数组行索引的解决方案
没问题!针对你需要打乱(100,784)形状float数组的行索引、同时完全保留列顺序的需求,我给你两个最常用的Python实现方案(默认你用的是numpy数组,这类多维数组场景下numpy是最常用的工具):
方法1:生成随机索引后重新索引(非原地修改)
这种方法会生成一个新的打乱后数组,原数组保持不变,适合需要保留原数据的场景:
- 先生成一组包含所有行索引的随机排列序列
- 用这个序列对原数组的行进行索引,即可得到行打乱、列完全不变的新数组
import numpy as np # 模拟你的(100,784) float数组 your_array = np.random.rand(100, 784).astype(np.float32) # 生成0到99的随机排列索引 shuffled_row_indices = np.random.permutation(your_array.shape[0]) # 打乱行,列顺序完全保留 shuffled_array = your_array[shuffled_row_indices]
方法2:原地打乱行索引(节省内存)
如果不需要保留原数组,可以用np.random.shuffle直接在原数组上修改,它默认会对数组的第一维度(也就是行)进行打乱操作,列不会受到任何影响:
import numpy as np your_array = np.random.rand(100, 784).astype(np.float32) # 直接原地打乱行索引,列顺序不变 np.random.shuffle(your_array)
关键说明
这两种方法都只会改变行的排列顺序,每一行内部的784个列元素的顺序和数值完全不会被修改,完全符合你的要求。如果是Pandas DataFrame的话,也可以用df.sample(frac=1, random_state=your_seed)实现类似效果,但纯numpy数组场景下上面的方法更高效。
内容的提问来源于stack exchange,提问作者Insung Lee
相关产品推荐
相关产品推荐

