2015-10-25 4 views
3

У меня есть этот фрагмент кода, и мне трудно понять, что является преимуществом определения метода numpy.zeros так, как показано ниже.Что означает этот параметр в методе numpy.zeros?

Z = np.zeros((10,10), [('x',float),('y',float)]) 
Z['x'], Z['y'] = np.meshgrid(np.linspace(0,1,10), 
         np.linspace(0,1,10)) 

print(Z) 

Какое значение упоминания о x и y?

+1

'Z' - * структурированный массив * (http://docs.scipy.org/doc/numpy/user/basics.rec.html) с полями' x' и 'y'. –

ответ

1

Секрет выхода находится на numpy.linspace(0,1,10), выводит numpy.array с:

[ 0.   0.11111111 0.22222222 0.33333333 0.44444444 0.55555556 
    0.66666667 0.77777778 0.88888889 1.  ] 

Для 'x' формы, как для 'y', где начинается '0', '1' где находится сто ps, с образцами 10.

numpy.zeros() определяют матрицу формы (M, N) для 'Ij' индексации, где M = N = 10

В numpy.meshgrid() индексы в матрице значения linspace результатов, как д.в., Aj

например

Z = np.zeros((10,10), [('x',int),('y',int)]) 
Z['x'], Z['y'] = np.meshgrid(np.linspace(0,10,10), np.linspace(0,10,10)) 
print Z 

Выходы:

[[(0, 0) (1, 0) (2, 0) (3, 0) (4, 0) (5, 0) (6, 0) (7, 0) (8, 0) (10, 0)] 
[(0, 1) (1, 1) (2, 1) (3, 1) (4, 1) (5, 1) (6, 1) (7, 1) (8, 1) (10, 1)] 
[(0, 2) (1, 2) (2, 2) (3, 2) (4, 2) (5, 2) (6, 2) (7, 2) (8, 2) (10, 2)] 
[(0, 3) (1, 3) (2, 3) (3, 3) (4, 3) (5, 3) (6, 3) (7, 3) (8, 3) (10, 3)] 
[(0, 4) (1, 4) (2, 4) (3, 4) (4, 4) (5, 4) (6, 4) (7, 4) (8, 4) (10, 4)] 
[(0, 5) (1, 5) (2, 5) (3, 5) (4, 5) (5, 5) (6, 5) (7, 5) (8, 5) (10, 5)] 
[(0, 6) (1, 6) (2, 6) (3, 6) (4, 6) (5, 6) (6, 6) (7, 6) (8, 6) (10, 6)] 
[(0, 7) (1, 7) (2, 7) (3, 7) (4, 7) (5, 7) (6, 7) (7, 7) (8, 7) (10, 7)] 
[(0, 8) (1, 8) (2, 8) (3, 8) (4, 8) (5, 8) (6, 8) (7, 8) (8, 8) (10, 8)] 
[(0, 10) (1, 10) (2, 10) (3, 10) (4, 10) (5, 10) (6, 10) (7, 10) (8, 10) 
    (10, 10)]] 

выводя матрицу ij скаляры.

Проверьте следующий URL,:

  1. numpy.linspace()
  2. numpy.zeros()
  3. numpy.meshgrid()
+0

Спасибо за объяснение –

+0

Добро пожаловать – AndreL

3

Это фактически определяет два отдельных ndarrays, один из которых называется 'x', а другой 'y'. Хотя в этом случае нет необходимости указывать dtype s, это способ создания этого типа double ndarray.

Хотя это использование явно не включено в numpy.zeros documentation, они показывают пример использования.


Редактировать:

@WarrenWeckesser связывает некоторые documentation for these structured arrays

+0

Спасибо за объяснение –

3

zeros создает (10,10) массив, где каждый элемент имеет dtype определенный np.dtype([('x',float),('y',float)]). То есть каждый элемент состоит из 2 поплавков, один из которых называется «x», другой «y».

Z = np.zeros((10,10), [('x',float),('y',float)]) 

В некотором смысле это делает (10,10,2) массив, за исключением того, что есть «стена» между 2 измерения, и другие. Например, вы не можете поменять его на другие измерения.Но можно «зрения» это как (10,10,2) массива:

Z.view('float').reshape(10,10,2) 

В 2 поля Z индексируются с Z['x'] и Z['y'], полученные мнения каждый (10,10) массивы.

2-я строка устанавливает значения этих 2-х полей

Z['x'], Z['y'] = np.meshgrid ... 

Обычно meshgrid возвращает 2 массивы, X, Y = np.meshgrid.... Так что это просто нормальное назначение Python.

Я еще не видел это связывание структурированного массива и meshgrid, но это имеет смысл. Все ли это полезно в другом вопросе.

Я собирался добавить пример того, как выглядит Z, но @AndreL сделал это для нас. Обратите внимание, что элементы Z отображаются как tuples, подразумевая, что они отличаются от двух столбцов элементов трехмерного массива.

+0

Спасибо за объяснение –

Смежные вопросы