• np.random.shuffle
2020-11-20 09:47:43

# jia yi ge shuffle

np.random.seed(200)
np.random.shuffle(X_train)
np.random.seed(200)
np.random.shuffle(Y_train)

设置一次seed，有效期只有一次
意思就是每次shuffle之前，必须有一个seed

更多相关内容
• np.random.shuffle(index) print(index[0:20]) X_train=X_train[index,:,:,:]#X_train是训练集，y_train是训练标签 y_train=y_train[index] 补充知识：Keras中shuffle和validation_split的顺序 模型的fit函数有两个...
• np.random.rand(d0,d1,d2……dn) 注：使用方法与np.random.randn()函数相同 作用： 通过本函数可以返回一个或一组服从“0~1”均匀分布的随机样本值。随机样本取值范围是[0,1)，不包括1。 应用：在深度学习的Dropout...
• 我们发现np.random.permutation要比np.random.shuffle快很多 x = np.random.rand(50000, 2) # 933 µs %timeit x.take(np.random.permutation(x.shape[0]), axis=0) # 1.41 ms %timeit x[np.random.permutation(x....

# 现象

我们发现np.random.permutation要比np.random.shuffle快很多

x = np.random.rand(50000, 2)
# 933 µs
%timeit x.take(np.random.permutation(x.shape[0]), axis=0)
# 1.41 ms
%timeit x[np.random.permutation(x.shape[0])]
# 1.41 ms
%timeit np.random.permutation(x)
# 46.3 ms
%timeit np.random.shuffle(x)

933 µs ± 2.74 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
1.41 ms ± 5.87 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
1.41 ms ± 4.22 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
46.3 ms ± 413 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)


# 原因

np.random.shuffle 是原地修改数组，因此需要开辟一个buffer作为交换空间buf = np.empty_like(x[0])，而且需要for循环反复交换

# https://github.com/numpy/numpy/blob/18f2385b29bdd62701a1a82d7bf33fd87430a05e/numpy/random/mtrand/mtrand.pyx#L4841
# Shuffling and permutations:
def shuffle(self, object x):
"""
shuffle(x)
Modify a sequence in-place by shuffling its contents.
This function only shuffles the array along the first axis of a
multi-dimensional array. The order of sub-arrays is changed but
their contents remains the same.
"""
# ......
elif isinstance(x, np.ndarray) and x.ndim > 1 and x.size:
# Multidimensional ndarrays require a bounce buffer.
buf = np.empty_like(x[0])
with self.lock:
for i in reversed(range(1, n)):
j = rk_interval(i, self.internal_state)
buf[...] = x[j]
x[j] = x[i]
x[i] = buf


np.random.permutation 是返回一个新数组，因此只用shuffle idx即可，比较快

# https://github.com/numpy/numpy/blob/18f2385b29bdd62701a1a82d7bf33fd87430a05e/numpy/random/mtrand/mtrand.pyx#L4917
def permutation(self, object x):
"""
permutation(x)
Randomly permute a sequence, or return a permuted range.
If x is a multi-dimensional array, it is only shuffled along its
first index.
"""
# ......
# Shuffle index array, dtype to ensure fast path
idx = np.arange(arr.shape[0], dtype=np.intp)
self.shuffle(idx)
return arr[idx]

展开全文
• np.random.shuffle(x) ：在原数组上进行，改变自身序列，无返回值。 np.random…permutation(x) ：不在原数组上进行，返回新的数组，不改变自身数组。 1. np.random.shuffle(x) 1. 对一维数组重新排序： import ...
• 对给定的数组进行重新排列的方式主要有两种：
1. np.random.shuffle(x) ：在原数组上进行，改变自身序列，无返回值
2. np.random…permutation(x) ：不在原数组上进行，返回新的数组，不改变自身数组

## 1. np.random.shuffle(x)

#### 1. 对一维数组重新排序：

import numpy as np

arr = np.arange(10)
print(arr)

np.random.shuffle(arr)
print(arr)


#### 2. 对多维数组重新排序：

arr = np.arange(12).reshape(3,4)
print(arr)

np.random.shuffle(arr)
print(arr)

np.random.shuffle(arr)
print(arr)


通过上述例子可以看出，对于一个多维的输入，只是在第一维上进行了随机排序。例如对这个3×4的矩阵来说，只是对行进行随机排序。

## 2. np.random.permutation(x)

#### 1. 可直接生成一个随机排列的数组：

np.random.permutation(10)


#### 2. 对一维数组随机排序：

>>> import numpy as np
>>> a=np.random.permutation([0,1,2,3,4,5,6,7,8,9])
>>> print(a)


#### 3. 对多维数组随机排序：

arr = np.arange(9).reshape((3, 3))
print(arr)

arr2 = np.random.permutation(arr)
print(arr)
print(arr2)


通过上述例子可以看出，对于一个多维的输入，只是在第一维上进行了随机排序。例如对这个3×3的矩阵来说，只是对行进行随机排序。

## 3. np.random.shuffle(x) 与 np.random.permutation(x) 的区别：

• 从代码可以看出，两个函数的功能类似。np.random.shuffle(x)改变自身数组，np.random.permutation(x)不改变自身数组。
展开全文
• numpy.random.shuffle 在做将caffe模型和预训练的参数转化为tensorflow的模型和预训练的参数，以便微调，遇到如下函数： def gen_data(source): while True: indices = range(len(source.images)) # indices = ...
• shuffle
  # y = np.transpose(y,(1,0,2))

# y = np.random.shuffle(y)

# y = np.transpose(y,(1,0,2))


以上这三行代码会导致ValueError: axes don't match array的错误，
无独有偶，如果使用swapaxis–shuffle–swapaxis也会出现类似的错误。
要避开这一问题。
而要想对某一维度随机排列,可以使用permutation+切片的方案，shuffle仅仅只对axis 0随机。

# 参考文献

https://www.cnblogs.com/zmbreathing/p/random_shuffle.html

展开全文
• np.random.shuffle(x)2. np.random.permutation(x)3. 区别 将数组打乱随机排列 两种方法： np.random.shuffle(x)：在原数组上进行，改变自身序列，无返回值。 np.random.permutation(x)：不在原数组上进行，返回新...
• import numpy as np arr=np.arange(10) print (arr) mat=np.arange(9).reshape(3,3) ...mat_per=np.random.permutation(mat) print(mat_per) 结果为： [0 1 2 3 4 5 6 7 8 9] [[0 1 2]  [3 4 5]  [6 7 8]] [[...
• np.random.shuffle(): 洗牌，生成随机列表，打乱原有的顺序 import random import numpy as np data = np.arange(6) print(data) np.random.shuffle(data) print(data) 输出结果： [0 1 2 3 4 5] [2 3 4 5 0 1]
• shuffle与permutation的区别 函数shuffle与permutation都是对原来的数组进行重新洗牌（即随机打乱原来的元素顺序）。区别在于shuffle直接在原来的数组上进行操作，改变原来数组的顺序...import numpy as np a = n...
• ## numpy的np.random.shuffle

万次阅读 多人点赞 2020-02-26 12:35:28
np.random,shuffle作用就是重新排序返回一个随机序列作用类似洗牌，我自己也写过一个洗牌小程序 下图是我做的一个尝试
• 描述： shuffle() 方法将序列的所有元素随机排序。 #实验可得每次shuffle后数据都被打乱，这个方法可以在机器学习训练 #的时候在每个epoch结束后将数据重新洗牌进入下一个epoch的学习 ...np.random.shuf
• 功能：生成随机列表 x = np.arange(10) print(x) np.random.shuffle(x) print(x) 输出： [0 1 2 3 4 5 6 7 8 9] [2 1 8 4 3 5 0 9 7 6]
• 代码： np.random.shuffle(x_data) x_data是一个张量，该函数用于将x——data自身打乱，注意是在原数组上进行的，不是返回一个新数组，而原张量不变。
• np.random.shuffle () 的用法记录 对多维tensor, 随机打乱其中一维的顺序： import numpy as np import random X=np.random.rand(30,2,3)#创建多维数组 time_index_list=[n for n in range(len(X))]#提取X第一维度...
• import numpy as np #实验可得每次shuffle后数据都被打乱，这个方法...np.random.shuffle(num) print(num) num1 = np.arange(20) print(num1) np.random.shuffle(num1) print(num1) np.random.shuffle(num1) print(n
• Permutation：（一组事物可能的一种） 序列，排列，排列中的任一组数字或文字; 这个函数的使用来随机排列一个数组的，第一个例子如图1所示： ...permutation = list(np.random.permutation(m)) #m为样本数 s
• 最近进行建模时，需要经常自己打乱数据集进行，numpy提供了一个函数可以对已有列表进行打乱 可以很方便的根据ID自己划分数据，当然为了使得每次划分数据相同，最好自己设定numy的随机...numpy.random.seed(num) ...
• 此函数主要是通过改变序列的内容来修改序列的位置。此函数只沿多维数组的第一个轴移动数组。子数组的顺序已更改，但其内容保持不变。 参数 x:即将被打乱顺序的list 返回值 无 ...
• np.random random() 生成一个[0, 1.)之间的随机浮点数 random([3, 2]) 生成形状为3×2的[0, 1.)之间的随机浮点数 rand(3, 2) 和random([3, 2])相同 randint(a ,b, size) 生成[a,b)之间的随机整数...
• 主要介绍了python numpy之np.random的随机数函数使用介绍,需要的朋友可以参考下
• 第一： get_random_batch函数讲解 # 我解释函数的特点是通过测试函数的输入和输出 进而了解函数...# 测试np.arange() 和 np.random.shuffle函数 def get_random_batch(): data_index = np.arange(10) print("dat...
• numpy.random.shuffle(x) 的重要因素就是仅仅打乱第一层的数据，一个元组中首先默认行为第一纬度，列是第二个纬度，所以打乱机器学习和深度学习常用标签时，一般使用 M*(N+1) 结构（M代表数据总量，N代表每个数据...
• from numpy as np index=np.arange(2000) np.random.shuffle(index) print(index[0:20]) X_train=X_train[index,:,:,:]#X_train是训练集，y_train是训练标签 y_train=y_train[index]

...