簡體   English   中英

如何在 numpy 中獲取矩陣向量的網格?

[英]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, :, :] == v1v2_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.

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