Numpy 按行随机播放 3-D numpy 数组
Numpy shuffle 3-D numpy array by row
假设我有以下 3D 矩阵:
1 1 1
2 2 2
3 3 3
在它后面(第三维度):
一个一个
b b b
c c c
如果我是正确的定义如下:
import numpy as np
x = np.array([[[1,1,1],
[2,2,2],
[3,3,3]],
[["a","a","a"],
["b","b","b"],
["c","c","c"]]])
我想按行随机打乱我的 3D 数组,变成这样:
2 2 2
1 1 1
3 3 3
落后:
b b b
一个一个
c c c
*请注意,a 始终属于 1,b 始终属于 2,c 始终属于 3(同一行)
如何实现?
使用np.random.shuffle
:
import numpy as np
x = np.array([[[1,1,1],
[2,2,2],
[3,3,3]],
[["a","a","a"],
["b","b","b"],
["c","c","c"]]])
ind = np.arange(x.shape[1])
np.random.shuffle(ind)
x[:, ind, :]
输出:
array([[['1', '1', '1'],
['3', '3', '3'],
['2', '2', '2']],
[['a', 'a', 'a'],
['c', 'c', 'c'],
['b', 'b', 'b']]], dtype='<U21')
在将第二个轴作为第一个轴调出后简单地使用 np.random.shuffle
,因为 shuffle
函数沿第一个轴工作并进行改组 in-place -
np.random.shuffle(x.swapaxes(0,1))
样本运行-
In [203]: x
Out[203]:
array([[['1', '1', '1'],
['2', '2', '2'],
['3', '3', '3']],
[['a', 'a', 'a'],
['b', 'b', 'b'],
['c', 'c', 'c']]], dtype='<U21')
In [204]: np.random.shuffle(x.swapaxes(0,1))
In [205]: x
Out[205]:
array([[['3', '3', '3'],
['2', '2', '2'],
['1', '1', '1']],
[['c', 'c', 'c'],
['b', 'b', 'b'],
['a', 'a', 'a']]], dtype='<U21')
正如我们在 .
中发现的那样,这应该非常有效
或者,另外两种排列轴的方法是 -
np.moveaxis(x,0,1)
x.transpose(1,0,2)
假设我有以下 3D 矩阵:
1 1 1
2 2 2
3 3 3
在它后面(第三维度):
一个一个
b b b
c c c
如果我是正确的定义如下:
import numpy as np
x = np.array([[[1,1,1],
[2,2,2],
[3,3,3]],
[["a","a","a"],
["b","b","b"],
["c","c","c"]]])
我想按行随机打乱我的 3D 数组,变成这样:
2 2 2
1 1 1
3 3 3
落后:
b b b
一个一个
c c c
*请注意,a 始终属于 1,b 始终属于 2,c 始终属于 3(同一行)
如何实现?
使用np.random.shuffle
:
import numpy as np
x = np.array([[[1,1,1],
[2,2,2],
[3,3,3]],
[["a","a","a"],
["b","b","b"],
["c","c","c"]]])
ind = np.arange(x.shape[1])
np.random.shuffle(ind)
x[:, ind, :]
输出:
array([[['1', '1', '1'],
['3', '3', '3'],
['2', '2', '2']],
[['a', 'a', 'a'],
['c', 'c', 'c'],
['b', 'b', 'b']]], dtype='<U21')
在将第二个轴作为第一个轴调出后简单地使用 np.random.shuffle
,因为 shuffle
函数沿第一个轴工作并进行改组 in-place -
np.random.shuffle(x.swapaxes(0,1))
样本运行-
In [203]: x
Out[203]:
array([[['1', '1', '1'],
['2', '2', '2'],
['3', '3', '3']],
[['a', 'a', 'a'],
['b', 'b', 'b'],
['c', 'c', 'c']]], dtype='<U21')
In [204]: np.random.shuffle(x.swapaxes(0,1))
In [205]: x
Out[205]:
array([[['3', '3', '3'],
['2', '2', '2'],
['1', '1', '1']],
[['c', 'c', 'c'],
['b', 'b', 'b'],
['a', 'a', 'a']]], dtype='<U21')
正如我们在
或者,另外两种排列轴的方法是 -
np.moveaxis(x,0,1)
x.transpose(1,0,2)