3 回答
TA贡献1829条经验 获得超4个赞
meshgrid您可以在使用with后对“列”重新排序[:,[0,2,1,3]],如果由于列数较多而需要使列表动态化,那么您可以看到我答案的结尾:
np.array(np.meshgrid(theta_array, XY_array)).T.reshape(-1,4)[:,[0,2,1,3]]
输出:
array([[ 1. , 1. , 44.0394952 , 505.81099922]],
[[ 1. , 1. , 61.03882938, 515.97253226]],
[[ 1. , 1. , 26.69851841, 525.18083012]],
...,
[[ 14. , 14. , 73.86032436, 973.91032818]],
[[ 14. , 14. , 103.96923524, 984.24366761]],
[[ 14. , 14. , 93.20663129, 995.44618851]])
如果您有很多列,您可以动态创建此列表:[0,2,1,3]使用列表理解。例如:
n = new_arr.shape[1]*2
lst = [x for x in range(n) if x % 2 == 0]
[lst.append(z) for z in [y for y in range(n) if y % 2 == 1]]
lst
[0, 2, 4, 6, 1, 3, 5, 7]
然后,您可以重写为:
np.array(np.meshgrid(theta_array, XY_array)).T.reshape(-1,4)[:,lst]
TA贡献1779条经验 获得超6个赞
您可以使用itertools.product:
out = np.array([*product(theta_array, XY_array)])
out = out.reshape(out.shape[0],-1)
输出:
array([[ 1. , 10. , 44.0394952 , 505.81099922],
[ 1. , 10. , 61.03882938, 515.97253226],
[ 1. , 10. , 26.69851841, 525.18083012],
...,
[ 4. , 14. , 73.86032436, 973.91032818],
[ 4. , 14. , 103.96923524, 984.24366761],
[ 4. , 14. , 93.20663129, 995.44618851]])
也就是说,这看起来非常像XY 问题。你想用这个数组做什么?
TA贡献1865条经验 获得超7个赞
正如此处的侧面/补充参考一样,我们对两种解决方案的执行时间进行了比较。完成此特定操作itertools所需的时间比同等操作多 10 倍numpy。
%%time
for i in range(1000):
z = np.array(np.meshgrid(theta_array, XY_array)).T.reshape(-1,4)[:,[0,2,1,3]]
CPU times: user 299 ms, sys: 0 ns, total: 299 ms
Wall time: 328 ms
%%time
for i in range(1000):
z = np.array([*product(theta_array, XY_array)])
z = z.reshape(z.shape[0],-1)
CPU times: user 2.79 s, sys: 474 µs, total: 2.79 s
Wall time: 2.84 s
添加回答
举报