1.问题描述
有一个(1,3)的数组F,我想对每个元素复制后并保留在同一个行内(维度)效果如下面的New F所示,查阅网上资料后,我找到了解决方案。
f1,f2,f3 = 0,0,10**(-5) #单位:牛顿N
F = np.array([f1,f2,f3])
Old F: [0.e+00 0.e+00 1.e-05]
New F:
[[[0.e+00 0.e+00 0.e+00 0.e+00]]
[[0.e+00 0.e+00 0.e+00 0.e+00]]
[[1.e-05 1.e-05 1.e-05 1.e-05]]]
2.解决方案
2.1 尝试1 np.tile
首先查到的是利用np.tile进行复制,我是用如下命令,但并未解决我的问题。
print("New F:\n",np.tile(F,(4,1)).reshape((3,1,4)))
New F:
[[[0.e+00 0.e+00 1.e-05 0.e+00]]
[[0.e+00 1.e-05 0.e+00 0.e+00]]
[[1.e-05 0.e+00 0.e+00 1.e-05]]]
2.2 尝试2 np.stack
虽然目的达到了,但是每次仅能复制偶数次。
print("New F:\n",np.stack(2*(F,F), axis=1).reshape((3,1,4)))
New F:
[[[0.e+00 0.e+00 0.e+00 0.e+00]]
[[0.e+00 0.e+00 0.e+00 0.e+00]]
[[1.e-05 1.e-05 1.e-05 1.e-05]]]
2.2 解决方案 np.repeat
使用np.repeat可以完美解决!!!
print("New F:\n",np.repeat(F[np.newaxis,...], 4, axis=1).reshape((3,1,4)))
New F:
[[[0.e+00 0.e+00 0.e+00 0.e+00]]
[[0.e+00 0.e+00 0.e+00 0.e+00]]
[[1.e-05 1.e-05 1.e-05 1.e-05]]]
以上仅是自己通过搜索网上资料的尝试,很有可能np.stack和np.tile也可以解决,暂且使用np.repeat进行数组内元素复制N次吧。