簡體   English   中英

從1d數組創建路徑坐標的2D數組

[英]creating a 2D array of path coordinates from 1d arrays

我試圖從1d-XYZ位置列表生成一個坐標數組。 我使用的軟件沿着每個列表迭代,這些列表由給定的優先級順序嵌套。 換句話說,如果我有x = [x0, x1]y = [y0, y1]z = [z0, z1] ,如果優先級是z> y> x,相應的數組將是:

x0 y0 z0
x0 y0 z1
x0 y1 z0
x0 y1 z1
x1 y0 z0
x1 y0 z1
x1 y1 z0
x1 y1 z1

我已經嘗試過使用列表推導,但是輸入是1d ndarrays而不是列表,這需要我將數據轉換為列表,然后將結果返回到ndarray(列表推導也可能在我試圖實現的某些情況下缺乏靈活性) 。 numpy中的函數是否有助於生成這樣的數組?

x = [1, 2, 3]
y = [4, 5, 6]
z = [7, 8, 9]
out = [[i, j, k] for i in x for j in y for k in z]
out = np.asarray(out)

產量

[[1, 4, 7],
 [1, 4, 8],
 [1, 4, 9],
 [1, 5, 7],
 [1, 5, 8],
 [1, 5, 9],
 [1, 6, 7],
 [1, 6, 8],
 [1, 6, 9],
 [2, 4, 7],
 [2, 4, 8],
 [2, 4, 9],
 [2, 5, 7],
 [2, 5, 8],
 [2, 5, 9],
 [2, 6, 7],
 [2, 6, 8],
 [2, 6, 9],
 [3, 4, 7],
 [3, 4, 8],
 [3, 4, 9],
 [3, 5, 7],
 [3, 5, 8],
 [3, 5, 9],
 [3, 6, 7],
 [3, 6, 8],
 [3, 6, 9]]

是的,你可以使用np.repeatnp.tile

x = [1, 2, 3]
y = [4, 5, 6]
z = [7, 8, 9]

out = np.zeros((len(x)**3, 3))
out[:, 0] = np.repeat(x, len(x)**2)
out[:, 1] = np.tile(np.repeat(y, len(x)), 3)
out[:, 2] = np.tile(z, len(x)**2)

輸出:

[[1. 4. 7.]
 [1. 4. 8.]
 [1. 4. 9.]
 [1. 5. 7.]
 [1. 5. 8.]
 [1. 5. 9.]
 [1. 6. 7.]
 [1. 6. 8.]
 [1. 6. 9.]
 [2. 4. 7.]
 [2. 4. 8.]
 [2. 4. 9.]
 [2. 5. 7.]
 [2. 5. 8.]
 [2. 5. 9.]
 [2. 6. 7.]
 [2. 6. 8.]
 [2. 6. 9.]
 [3. 4. 7.]
 [3. 4. 8.]
 [3. 4. 9.]
 [3. 5. 7.]
 [3. 5. 8.]
 [3. 5. 9.]
 [3. 6. 7.]
 [3. 6. 8.]
 [3. 6. 9.]]

如果您事先知道坐標是整數,您甚至可以:

out = np.zeros((len(x)**3, 3), dtype=int)

嘗試這個。

np.array(np.meshgrid(x,y,z)).T.reshape(-1,3)

OUTPUT:

[[1 4 7]
 [1 5 7]
 [1 6 7]
 [2 4 7]
 [2 5 7]
 [2 6 7]
 [3 4 7]
 [3 5 7]
 [3 6 7]
 [1 4 8]
 [1 5 8]
 [1 6 8]
 [2 4 8]
 [2 5 8]
 [2 6 8]
 [3 4 8]
 [3 5 8]
 [3 6 8]
 [1 4 9]
 [1 5 9]
 [1 6 9]
 [2 4 9]
 [2 5 9]
 [2 6 9]
 [3 4 9]
 [3 5 9]
 [3 6 9]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM