![](/img/trans.png)
[英]Creating a pandas dataframe from a 2d numpy array (to be a column of 1d numpy arrays) and a 1d np array of labels
[英]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]]
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.