Numpy meshgrid в 3D

http://www.asp.net/mvc

Возгласы, отправленные, прежде чем я был сделан. Сайт MVC ASP.NET имеет тонны видео/экранной демонстрации при начале работы с ASP.NET MVC. Определенно наблюдайте Scott Hanselman сначала.

Редактирование

экранные демонстрации Rob Conery, что @David, если обеспечиваются на ASP.NET сайт MVC также, под видео. Это составило бы одно место для получения тех ресурсов и также тех расстроенная команда MVC ASP.NET.

Одно примечание по любому ресурсу Вы используете. Вы могли столкнуться с функциональностью, которая больше не доступна в платформе из-за него находиться в разработке. При использовании ресурсов при условии, что Вы уже нашли наряду с учебными руководствами, Вы найдете замены или как обойти его.

43
задан astrofrog 1 December 2009 в 16:53
поделиться

3 ответа

Вот исходный код meshgrid:

def meshgrid(x,y):
    """
    Return coordinate matrices from two coordinate vectors.

    Parameters
    ----------
    x, y : ndarray
        Two 1-D arrays representing the x and y coordinates of a grid.

    Returns
    -------
    X, Y : ndarray
        For vectors `x`, `y` with lengths ``Nx=len(x)`` and ``Ny=len(y)``,
        return `X`, `Y` where `X` and `Y` are ``(Ny, Nx)`` shaped arrays
        with the elements of `x` and y repeated to fill the matrix along
        the first dimension for `x`, the second for `y`.

    See Also
    --------
    index_tricks.mgrid : Construct a multi-dimensional "meshgrid"
                         using indexing notation.
    index_tricks.ogrid : Construct an open multi-dimensional "meshgrid"
                         using indexing notation.

    Examples
    --------
    >>> X, Y = np.meshgrid([1,2,3], [4,5,6,7])
    >>> X
    array([[1, 2, 3],
           [1, 2, 3],
           [1, 2, 3],
           [1, 2, 3]])
    >>> Y
    array([[4, 4, 4],
           [5, 5, 5],
           [6, 6, 6],
           [7, 7, 7]])

    `meshgrid` is very useful to evaluate functions on a grid.

    >>> x = np.arange(-5, 5, 0.1)
    >>> y = np.arange(-5, 5, 0.1)
    >>> xx, yy = np.meshgrid(x, y)
    >>> z = np.sin(xx**2+yy**2)/(xx**2+yy**2)

    """
    x = asarray(x)
    y = asarray(y)
    numRows, numCols = len(y), len(x)  # yes, reversed
    x = x.reshape(1,numCols)
    X = x.repeat(numRows, axis=0)

    y = y.reshape(numRows,1)
    Y = y.repeat(numCols, axis=1)
    return X, Y

Это довольно просто понять. Я расширил шаблон до произвольного числа измерений, но этот код ни в коем случае не оптимизирован (и не проверяется на ошибки полностью), но вы получаете то, за что платите. Надеюсь, это поможет:

def meshgrid2(*arrs):
    arrs = tuple(reversed(arrs))  #edit
    lens = map(len, arrs)
    dim = len(arrs)

    sz = 1
    for s in lens:
        sz*=s

    ans = []    
    for i, arr in enumerate(arrs):
        slc = [1]*dim
        slc[i] = lens[i]
        arr2 = asarray(arr).reshape(slc)
        for j, sz in enumerate(lens):
            if j!=i:
                arr2 = arr2.repeat(sz, axis=j) 
        ans.append(arr2)

    return tuple(ans)
30
ответ дан 26 November 2019 в 22:45
поделиться

, я думаю, что вы хотите, например,

X, Y, Z = numpy.mgrid[-10:10:100j, -10:10:100j, -10:10:100j]

.

5
ответ дан 26 November 2019 в 22:45
поделиться

Не могли бы вы показать нам, как вы используете np.meshgrid? Есть очень хороший шанс, что вам действительно не нужен meshgrid, потому что широковещательная рассылка numpy может делать то же самое, не генерируя повторяющийся массив.

Например,

import numpy as np

x=np.arange(2)
y=np.arange(3)
[X,Y] = np.meshgrid(x,y)
S=X+Y

print(S.shape)
# (3, 2)
# Note that meshgrid associates y with the 0-axis, and x with the 1-axis.

print(S)
# [[0 1]
#  [1 2]
#  [2 3]]

s=np.empty((3,2))
print(s.shape)
# (3, 2)

# x.shape is (2,).
# y.shape is (3,).
# x's shape is broadcasted to (3,2)
# y varies along the 0-axis, so to get its shape broadcasted, we first upgrade it to
# have shape (3,1), using np.newaxis. Arrays of shape (3,1) can be broadcasted to
# arrays of shape (3,2).
s=x+y[:,np.newaxis]
print(s)
# [[0 1]
#  [1 2]
#  [2 3]]

Дело в том, что S = X + Y можно и нужно заменить на s = x + y [:, np.newaxis] , потому что последнее не требует (возможно, больших) повторяющихся массивов. Он также легко обобщается на более высокие измерения (больше осей). Вы просто добавляете np.newaxis там, где это необходимо для обеспечения широковещательной передачи по мере необходимости.

См. http://www.scipy.org/EricsBroadcastingDoc для получения дополнительной информации о numpy-вещании.

7
ответ дан 26 November 2019 в 22:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: