gpt4 book ai didi

python - 在 Python 中以对数方式缩放二维数组

转载 作者:太空宇宙 更新时间:2023-11-03 20:42:09 27 4
gpt4 key购买 nike

我有一个二维频谱图数据数组,我正在使用 scikit-image 对其进行缩放,以便在网络浏览器中显示。我想在 y 轴上以对数方式缩放数组。”

我可以使用 Matplotlib 在 y 轴上以对数方式绘制数据,但我想访问这个新缩放图像的 2D 数组表示,但 Matplotlib 只提供原始的、未缩放的数组。 Scikit-image 线性缩放 2D 数组,但不是对数缩放。

# plot a log-scaled z
w, h = z.shape
fig, ax = plt.subplots()
ax.set_yscale('symlog')
mesh = ax.pcolormesh(np.arange(h+1), np.arange(w+1), z)
# get the array of z
logimg = mesh.get_array().reshape(mesh._meshHeight, mesh._meshWidth)

最佳答案

让我们从一些示例数据开始:

import numpy as np
from scipy.interpolate import interp1d
import matplotlib.pylab as plt

# some 2D example data
x, y = np.arange(30)+1, np.arange(20)+1
x_grid, y_grid = np.meshgrid(x, y)
z_grid = np.cos(2*np.pi*x_grid/10) + np.sin(2*np.pi*y_grid/4)

# Graph 1
plt.pcolormesh(x, np.log(y), z_grid);
plt.xlabel('x'); plt.ylabel('log(y) (non regular spacing)');

这是一个以 log(y) 为纵轴的图表。沿 y 的采样是不均匀的(数据未更改,它们仅绘制在变形的网格上):

graph after

为了获得规则网格上的变形数据,在 log(y) 和新的规则 y 网格之间执行插值:

# Interpolation of the transformed data on a regular new y axis
ylog_interpolation = interp1d(np.log(y), z_grid.T)
new_y = np.linspace(min(np.log(y)), max(np.log(y)), len(y))
new_z_grid = ylog_interpolation(new_y).T

# axis
plt.pcolormesh(x, new_y, new_z_grid);
plt.xlabel('x'); plt.ylabel('new y (regular spacing)');

after interolation

现在,网格是规则的,但数据变形了,new_z_grid可以导出为图像。

关于python - 在 Python 中以对数方式缩放二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56798643/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com