[英]How to get meshgrid of vectors of matrices in numpy?
兩個 1d 向量上的普通網格網格為每個向量返回一個矩陣,其中包含自身的副本以適應另一個向量的長度。
import numpy as np
a, b = np.meshgrid(np.arange(2), np.arange(3, 6))
a
Out[22]:
array([[0, 1],
[0, 1],
[0, 1]])
b
Out[23]:
array([[3, 3],
[4, 4],
[5, 5]])
我想要相同的,但每個元素都是一個體積,meshgrid 僅在第一個維度上:
v1
Out[17]:
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
v2
Out[18]:
array([[11, 12, 13, 14, 15, 16],
[17, 18, 19, 20, 21, 22],
[23, 24, 25, 26, 27, 28]])
v1.shape
Out[19]: (2, 5)
v2.shape
Out[20]: (3, 6)
我想要兩個網格網格v1_mesh.shape==(2, 3, 5)
和v2_mesh.shape==(2, 3, 6)
。
v1_mesh[i, :, :] == v1
和v2_mesh[:, j, :] == v2
用於所有相關索引,就像標准網格一樣。
也就是總共2*3=6 == np.prod([v1.shape[0], v2.shape[0]])
組合。
使用a, b = np.meshgrid(v1, v2)
給出a.shape == b.shape == (np.prod(v1.shape), np.prod(v1.shape))
這比我想要的組合更多. 我只想要沿第一軸的組合。
meshgrid
指定輸入是 1d,因此在您的情況下,它首先有效地ravel
它們,因此是prod
形狀。
In [3]: v1=np.arange(10).reshape(2,5)
In [5]: v2=np.arange(11,29).reshape(3,6)
這 2 個meshgrid
應該等效於帶有sparse
的網格網格( meshgrid
代碼執行此操作,除了使用reshape
而不是None
索引)。
In [6]: v11, v21 = v1[:,None,:], v2[None,:,:]
In [7]: v11.shape
Out[7]: (2, 1, 5)
In [8]: v21.shape
Out[8]: (1, 3, 6)
我們可以用repeat
將它們充實到完整的形狀:
In [9]: v12 = np.repeat(v11,3,1)
In [10]: v22 = np.repeat(v21,2,0)
In [11]: v12.shape
Out[11]: (2, 3, 5)
In [12]: v22.shape
Out[12]: (2, 3, 6)
meshgrid
使用broadcast_arrays
擴展“密集”維度,但重復更容易理解。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.