[英]numpy non-integer grid
我是numpy的新手,我正試圖找到一種Pythonic :)方法來生成一個常規的3D網格點。
function almost does what I want, but I gather that it only works with integers. 使用numpy, 函數幾乎可以實現我想要的功能,但我認為它只適用於整數。
import numpy as np
ind=np.ndindex(2,2,1)
for i in ind:
print(i)
>>>(0, 0, 0)
(0, 1, 0)
(1, 0, 0)
(1, 1, 0)
我基本上想要相同的東西,但使用浮動來定義值。
我定義了一個框的尺寸以及x,z和z細分的數量。
讓我們從創建x,y和z維度線性空間開始。
import numpy as np
corner1 = [0.0, 0.0, 0.0]
corner2 = [1.0, 1.0, 1.0]
nx, ny, nz = 5, 3, 7
xspace = np.linspace(corner1[0], corner2[0], nx)
yspace = np.linspace(corner1[1], corner2[1], ny)
zspace = np.linspace(corner1[2], corner2[2], nz)
現在,我應該如何組合這些來給我一個網格中所有點的數組? 感謝您的時間!
我發現你的問題有點令人困惑,因為ndindex
返回一個生成器,但你似乎要求一個n維數組。 發電機非常簡單:
>>> list(numpy.broadcast(*numpy.ix_(x, y, z)))
[(0.0, 0.0, 0.0),
(0.0, 0.0, 1.0),
(0.0, 0.5, 0.0),
(0.0, 0.5, 1.0),
(0.0, 1.0, 0.0),
(0.0, 1.0, 1.0),
(1.0, 0.0, 0.0),
(1.0, 0.0, 1.0),
(1.0, 0.5, 0.0),
(1.0, 0.5, 1.0),
(1.0, 1.0, 0.0),
(1.0, 1.0, 1.0)]
要將它打包成一個數組,你可以創建一個數組並重新整形,記住值三元組是它自己的維度(因此最后的額外3
)。
>>> numpy.array(list(numpy.broadcast(*numpy.ix_(x, y, z)))).reshape((2, 3, 2, 3))
array([[[[ 0. , 0. , 0. ],
[ 0. , 0. , 1. ]],
[[ 0. , 0.5, 0. ],
[ 0. , 0.5, 1. ]],
[[ 0. , 1. , 0. ],
[ 0. , 1. , 1. ]]],
[[[ 1. , 0. , 0. ],
[ 1. , 0. , 1. ]],
[[ 1. , 0.5, 0. ],
[ 1. , 0.5, 1. ]],
[[ 1. , 1. , 0. ],
[ 1. , 1. , 1. ]]]])
那簡單的說法:
xyz = numpy.mgrid[0:3:0.1, 0:2:0.2, 0:1:0.5]
print xyz
array([[[[ 0. , 0. ],
[ 0. , 0. ],
[ 0. , 0. ],
...,
[[ 0.1, 0.1],
[ 0.1, 0.1],
[ 0.1, 0.1],
...,
[[ 0.2, 0.2],
[ 0.2, 0.2],
[ 0.2, 0.2]]
...,
[[ 2.9, 2.9],
[ 2.9, 2.9],
[ 2.9, 2.9],
...
[[[ 0. , 0. ],
[ 0.2, 0.2],
[ 0.4, 0.4],
...,
[ 0. , 0.5],
[ 0. , 0.5],
[ 0. , 0.5]]]])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.