如何在全息视图中使用全息图查看二维阵列切片(Python 3.5.1)
我最近发现了如何在全息视图中使用全息图查看二维阵列切片(Python 3.5.1),python,arrays,image,numpy,holoviews,Python,Arrays,Image,Numpy,Holoviews,我最近发现了holoviews,而hv.Image方法是plt.Image的一个很好的替代方法。有一个非常酷的功能叫做hv.HoloMap,它允许用户输入函数并调整函数中的参数,以交互方式查看生成的二维阵列。我尝试了以下几个启动HoloMap对象和另一个dynamicMap对象的示例,但无法让它与我的数据一起工作。() 在我的真实数据集中,我将有3D数组,我想沿着一个轴(在本例中是z)切片,在那里我可以交互地查看结果切片。我用下面的numpy和xarray做了一个基本示例: 如何使用我的hv.H
holoviews
,而hv.Image
方法是plt.Image
的一个很好的替代方法。有一个非常酷的功能叫做hv.HoloMap
,它允许用户输入函数并调整函数中的参数,以交互方式查看生成的二维阵列。我尝试了以下几个启动HoloMap
对象和另一个dynamicMap
对象的示例,但无法让它与我的数据一起工作。()
在我的真实数据集中,我将有3D数组,我想沿着一个轴(在本例中是z)切片,在那里我可以交互地查看结果切片。我用下面的numpy
和xarray
做了一个基本示例:
如何使用我的hv.HoloMap
(或hv.dynamicMap
)对象构建我的基本函数image\u slice
(在z
维度上迭代)来查看我的3D数据阵列的2D切片?
import xarray as xr
import numpy as np
import holoviews as hv; hv.notebook_extension()
#Building 2D Array (X & Y)
dist = np.linspace(-0.5,0.5,202) # Linear spatial sampling
XY,YX = np.meshgrid(dist, dist)
#Add along 3rd Dimension
Z_list = []
for i in range(10):
Z_list.append(xr.DataArray(XY*i,dims=["x","y"]))
#Concat list of 2D Arrays into a 3D Array
DA_3D = xr.concat(Z_list,dim="z")
# DA_3D.shape
# (10, 202, 202)
def image_slice(DA_var,k):
return(hv.Image(DA_var[k,:,:].values))
#http://holoviews.org/Tutorials/Showcase.html Interactive Exploration w/ Circular Wave example
keys = [(DA_3D,k) for k in range(10)] #Every combination
items = [(k, image_slice(*k)) for k in keys]
# visual_slice = hv.HoloMap(items)
# TypeError: unhashable type: 'DataArray
dmap = hv.DynamicMap(slice_image, kdims=[hv.Dimension('z_axis',range=(0, 10))])
# dmap
# TypeError: slice_image() missing 1 required positional argument: 'k'
# Which makes perfect sense because the first argument is the DataArray object but I don't know how to input that into this type of object since `hv.Dimension` requires a range
我使用
Python 3.5.1
和Holoviews版本((1,4,3),
首先感谢大家的关注,我是Holoviews的作者之一。理解HoloMap
和DynamicMap
之间的区别很重要
HoloMap很像一个字典,你用(键,值)对填充它,然后你可以用小部件探索数据的可视化。DynamicMap在你构建它时不包含任何项目,而是定义一个回调函数,当小部件(或你)运行时会对它进行评估请求一个特定的键。这意味着您可以在动态维度上定义一个连续范围或离散样本列表,让您可以探索比全息图更大的空间
以您的示例为例,您可以通过以下方式构建全息图和动态地图:
将xarray作为xr导入
将numpy作为np导入
将全息视图导入为hv;
hv.笔记本_扩展()
#构建二维阵列(X&Y)
dist=np.linspace(-0.5,0.5202)#线性空间采样
XY,YX=np.网格(距离,距离)
#沿三维方向添加
Z_列表=[]
对于范围(10)内的i:
Z_list.append(xr.DataArray(XY*i,dims=[“x”,“y”]))
#将二维阵列列表合并为三维阵列
DA_3D=xr.concat(Z_列表,dim=“Z”)
#达乌3D.shape
# (10, 202, 202)
def图像_切片(k):
返回(hv.Image(dau 3D[k,:,:]值))
键=列表(范围(10))
#通过计算所有键上的函数来构建全息图
hmap=hv.HoloMap([(k,图像切片(k))用于k个关键帧],kdims=['z_轴'])
#通过定义维度上的采样来构造DynamicMap
dmap=hv.DynamicMap(图像切片,kdims=[hv.Dimension('z_轴',值=键)])
如果您还有任何问题,可以加入我们。请注意,我们正计划将xarray与HoloView正确集成,这样您就不必手动定义HoloMap/DynamicMap来探索多维数组。谢谢您的帮助。我实际上通过
xarray
了解了有关HoloMap
的信息,因此这将是非常棒的f两个平台之间进行了一些交流。继续努力!这是一个非常有用的工具。我想最终让我们Holoviews
来评估来自Scikit learn
的机器学习模型,可能有点晚了,但我们现在直接在Holoviews数据结构中支持XArray数据集。GeoViews包中有一些文档在上,HoloViews本身将有即将发布的文档。这样做的时机太疯狂了。我已经几个月没有考虑HoloViews了,最近也没有使用Xarray。昨天我有一个非常复杂的数据集要处理,所以开始尝试Xarray。我想在开车回家和di的时候用HoloViews来可视化它我不想忘记这个想法(当然我确实忘记了)。我在工作中看到的第一件事就是这条信息,它让我完全想起了我的想法。哈哈,非常感谢!你发送的链接将非常有用。