Как преобразовать данные из формата сетки в массив и наоборот: Python - PullRequest
3 голосов
/ 13 апреля 2019

У меня есть набор данных data = f(x,y). Данные доступны в формате сетки. Я хочу преобразовать его в массив, чтобы каждая строка была упорядочена в формате [x,y,data]. Кроме того, как это сделать наоборот?

import numpy as np

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

print(data)  #Now it is in meshgrid format

Ответы [ 2 ]

0 голосов
/ 13 апреля 2019

Вы можете использовать следующие два выражения:

# Convert from mesh to rows:
row_format = np.stack([z.ravel() for z in (xx, yy, data)], axis=1)

# Convert from rows to mesh:
xx, yy, data = np.swapaxes(row_format, 0, 1).reshape(3, len(y), len(x))
0 голосов
/ 13 апреля 2019

Вы можете изменить данные, используя следующие подходы:

1. В сетчатом формате

import numpy as np

x = np.arange(-5, 5, 2)
y = np.arange(-4, 4, 2)
xx, yy = np.meshgrid(x, y)
data = np.sin(xx**2 + yy**2) / (xx**2 + yy**2)

print(data)  # In meshgrid format

Выход:

[[-0.00386885 -0.00529407 -0.05655279 -0.05655279 -0.00529407]
 [-0.02288393  0.03232054 -0.19178485 -0.19178485  0.03232054]
 [-0.00529407  0.04579094  0.84147098  0.84147098  0.04579094]
 [-0.02288393  0.03232054 -0.19178485 -0.19178485  0.03232054]]

2. В формате столбца:

z = len(x)*len(y)
a = np.reshape(xx, z)
b = np.reshape(yy, z)
c = np.reshape(data, z)

new = np.c_[a, b, c]

print(new) # In an array ordered like [x, y, data]

Выход:

[[-5.00000000e+00 -4.00000000e+00 -3.86884558e-03]
 [-3.00000000e+00 -4.00000000e+00 -5.29407000e-03]
 [-1.00000000e+00 -4.00000000e+00 -5.65527936e-02]
 [ 1.00000000e+00 -4.00000000e+00 -5.65527936e-02]
 [ 3.00000000e+00 -4.00000000e+00 -5.29407000e-03]
 [-5.00000000e+00 -2.00000000e+00 -2.28839270e-02]
 [-3.00000000e+00 -2.00000000e+00  3.23205413e-02]
 [-1.00000000e+00 -2.00000000e+00 -1.91784855e-01]
 [ 1.00000000e+00 -2.00000000e+00 -1.91784855e-01]
 [ 3.00000000e+00 -2.00000000e+00  3.23205413e-02]
 [-5.00000000e+00  0.00000000e+00 -5.29407000e-03]
 [-3.00000000e+00  0.00000000e+00  4.57909428e-02]
 [-1.00000000e+00  0.00000000e+00  8.41470985e-01]
 [ 1.00000000e+00  0.00000000e+00  8.41470985e-01]
 [ 3.00000000e+00  0.00000000e+00  4.57909428e-02]
 [-5.00000000e+00  2.00000000e+00 -2.28839270e-02]
 [-3.00000000e+00  2.00000000e+00  3.23205413e-02]
 [-1.00000000e+00  2.00000000e+00 -1.91784855e-01]
 [ 1.00000000e+00  2.00000000e+00 -1.91784855e-01]
 [ 3.00000000e+00  2.00000000e+00  3.23205413e-02]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...