假设我有以下3D矩阵:
1 1 1
2 2 2
3 3 3
及其后面(第3维):
a a a
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
a a a
c c c
*请注意,a始终属于1,b属于2和c属于3(同一行)
我该如何实现?
答案 0 :(得分:2)
使用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')
答案 1 :(得分:1)
在将第二个轴作为第一个轴后,只需使用np.random.shuffle
,因为shuffle
函数沿第一个轴工作并就地进行改组-
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')
正如我们在this Q&A
中发现的那样,这应该非常有效。
或者,还有两种其他方式来置换轴-
np.moveaxis(x,0,1)
x.transpose(1,0,2)