簡體   English   中英

如何使用 numpy 創建一個 n 維向量的均勻網格(換句話說,均勻填充一個 n 維超立方體)?

[英]How to create a uniform grid of n-dimensional vectors using numpy (in other words, uniformly fill a n-dimensional hypercube)?

在一維中,“網格”將是一個介於 0 和 100 之間的數字數組。在二維中,網格將是一個點數組,例如 [0, 0] [0, 1] [0, 2]... [1,0]、[1、1]...[99、99]。 在三個維度和更多維度中,它看起來很相似。

我現在的output是這樣的:

輸出錯誤

它不會為第 n - 1 列中的每個值創建每個值組合。

我使用的代碼是:

import numpy as np

class Cube:
    side_len = 100
    def __init__(self, n):
        current_point = np.zeros(n)
        self.arr = []
        for i in range(n):
            for j in range(Cube.side_len):
                self.arr.append(current_point.copy())
                current_point[i] += 1.0
        self.arr.append([Cube.side_len for _ in range(n)])
        self.arr = np.array(self.arr)
        np.random.shuffle(self.arr)

if __name__ == '__main__':
    cube(10)

我也嘗試使用meshgrid ,但我無法理解文檔。 我希望它是一個淺表的點列表,但我得到了 X、Y,但我不知道我應該用它做什么?

這是你做的方式。 具有 3 個維度的 Meshgrid 返回一個包含三個東西的列表,它們是 3 個軸的值,以獲得均勻分布的點。 然后,您可以使用vstack將它們堆疊在一起,並轉置以獲得 3D 坐標的列表:

>>> import numpy as np
>>> a = np.linspace(0,100,101)
>>> x = np.meshgrid( a, a, a )
>>> y = np.vstack(list(map(np.ravel,x))).T
>>> y
array([[  0.,   0.,   0.],
       [  0.,   0.,   1.],
       [  0.,   0.,   2.],
       ...,
       [100., 100.,  98.],
       [100., 100.,  99.],
       [100., 100., 100.]])
>>>

感謝這篇文章: 如何將 output 的 meshgrid 轉換為相應的點數組?

請記住,網格的大小是一個軸的立方,所以這些很快就會變大。

暫無
暫無

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

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