我有 3 個先驗,給出了最小和最大范圍。通過使用它們,我需要以以下形式創建一個 NumPy 陣列;
M = [[x_0, y_0, z_0], [x_1, y_1, z_1], ...,[x_N, y_N, z_N]]
在哪里x=[0.60, 0.80]
,我怎樣才能以最有效y=[1, 80]
的z=[0.022, 0.024]
方式(即通過最少的代碼和使用 NumPy)做到這一點?
uj5u.com熱心網友回復:
它可以通過以下方式實作:
np.array([x, y, z]).T
一些基準測驗:
size = 3 * 1000
50 loops, best of 5: 8.14 μs per loop # np.vstack
50 loops, best of 5: 2.95 μs per loop # this answer
size = 3 * 10000
50 loops, best of 5: 27.3 μs per loop
50 loops, best of 5: 19.9 μs per loop
size = 3 * 100000
50 loops, best of 5: 383 μs per loop
50 loops, best of 5: 359 μs per loop
size = 3 * 1000000
50 loops, best of 5: 5.23 ms per loop
50 loops, best of 5: 5.09 ms per loop
uj5u.com熱心網友回復:
import numpy as np
N = 4
xs = np.random.uniform(x[0], x[1], size=N)
ys = np.random.uniform(y[0], y[1], size=N)
zs = np.random.uniform(z[0], z[1], size=N)
res = np.vstack((xs,ys,zs)).transpose()
數字示例
N = 4
xs = np.random.uniform(0.6, 1.1, size=N)
ys = np.random.uniform(3, 5, size=N)
zs = np.random.uniform(8, 9, size=N)
res = np.vstack((xs,ys,zs))
res.transpose()
# array([[0.88860867, 3.11233047, 8.26189772],
# [0.70096631, 4.984737 , 8.01999442],
# [1.08111807, 3.54934757, 8.28137655],
# [1.04116942, 3.16903737, 8.12647381]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/497807.html