np.array([1,2,3])
我有阵容.我想把它变成一个numpy数组,每个1:1排列的元组.像这样:
np.array([
[(1,1),(1,2),(1,3)],
[(2,1),(2,2),(2,3)],
[(3,1),(3,2),(3,3)],
])
有关如何有效地做到这一点的任何想法?我需要做几百万次这个操作.
解决方法:
如果您正在使用numpy,请不要使用元组.使用它的力量并添加另一个尺寸为2的尺寸.
我的建议是:
x = np.array([1,2,3])
np.vstack(([np.vstack((x, x, x))], [np.vstack((x, x, x)).T])).T
要么:
im = np.vstack((x, x, x))
np.vstack(([im], [im.T])).T
对于一般数组:
ix = np.vstack([x for _ in range(x.shape[0])])
return np.vstack(([ix], [ix.T])).T
这将产生你想要的东西:
array([[[1, 1],
[1, 2],
[1, 3]],
[[2, 1],
[2, 2],
[2, 3]],
[[3, 1],
[3, 2],
[3, 3]]])
但作为3D矩阵,正如您在查看其形状时所看到的:
Out[25]: (3L, 3L, 2L)
当阵列大小变大时,这比具有排列的解决方案更有效.我的解决方案针对@ Kasra的时间为1ms,而对于一个100的大小为100的阵列,我的解决方案为46ms.@ AshwiniChaudhary的解决方案更有效率.