- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为了清楚起见,我已经基本上重新表述了我之前的问题。根据 Ryan 在单独 channel 上的建议, numpy.digitize 看起来是实现我目标的正确工具。
我有一个形状为 x、y 和时间的 xarray.DataArray。我试图弄清楚我应该为 apply_ufunc
提供哪些值函数的 'input_core_dims' 和 'output_core_dims' 参数以应用 numpy.digitize
到时间序列中的每个图像。
直观地说,我希望输出维度为 ['time', 'x', 'y']。我认为输入核心尺寸应该是x
和 y
因为我要播numpy.digitize
时间维度上的函数。然而这行不通。通过将 numpy.digitize 应用于我的时间序列中的第一个 numpy 数组,我得到了正确的结果:
[84]
blues
<xarray.DataArray 'reflectance' (time: 44, y: 1082, x: 1084)>
dask.array<shape=(44, 1082, 1084), dtype=uint16, chunksize=(44, 1082, 1084)>
Coordinates:
band int64 1
* y (y) float64 9.705e+05 9.705e+05 9.705e+05 ... 9.673e+05 9.672e+05
* x (x) float64 4.889e+05 4.889e+05 4.889e+05 ... 4.922e+05 4.922e+05
* time (time) datetime64[ns] 2018-10-12 2018-10-16 ... 2019-05-26
Attributes:
transform: (3.0, 0.0, 488907.0, 0.0, -3.0, 970494.0)
crs: +init=epsg:32630
res: (3.0, 3.0)
is_tiled: 1
nodatavals: (1.0, 1.0, 1.0, 1.0)
scales: (1.0, 1.0, 1.0, 1.0)
offsets: (0.0, 0.0, 0.0, 0.0)
[79]
#correct result
np.digitize(np.array(blues[0]), bin_arr)
array([[14, 15, 15, ..., 16, 17, 16],
[14, 13, 14, ..., 16, 16, 15],
[15, 14, 15, ..., 16, 16, 15],
...,
[16, 18, 18, ..., 15, 16, 15],
[17, 18, 18, ..., 16, 17, 16],
[17, 17, 17, ..., 17, 18, 17]])
apply_ufunc
的理解是不正确的。将 input_core_dims 更改为 [['x','y']] 或 ['time'] 不会产生正确的数字化结果
bin_arr = np.linspace(configs.rmin, configs.rmax, 50)
blues = t_series['reflectance'].sel(band=1).chunk({'time':-1})
result = xr.apply_ufunc(partial(np.digitize, bins=bin_arr), blues, input_core_dims=[['time']], dask="parallelized", output_dtypes=[blues.dtype])
#wrong values, correct shape
np.array(result)[0]
array([[14, 16, 15, ..., 48, 18, 15],
[15, 16, 16, ..., 49, 18, 15],
[15, 16, 16, ..., 49, 18, 14],
...,
[16, 21, 17, ..., 50, 19, 15],
[17, 21, 17, ..., 50, 19, 16],
[16, 21, 18, ..., 50, 20, 17]])
bin_arr = np.linspace(configs.rmin, configs.rmax, 50)
blues = t_series['reflectance'].sel(band=1).chunk({'time':-1})
result = xr.apply_ufunc(partial(np.digitize, bins=bin_arr), blues, input_core_dims=[['x','y']], dask="parallelized", output_dtypes=[blues.dtype])
#wrong values, correct shape
np.array(result)[0]
array([[14, 14, 15, ..., 16, 17, 17],
[15, 13, 14, ..., 18, 18, 17],
[15, 14, 15, ..., 18, 18, 17],
...,
[16, 16, 16, ..., 15, 16, 17],
[17, 16, 16, ..., 16, 17, 18],
[16, 15, 15, ..., 15, 16, 17]])
apply_ufunc
的结果显示为 xarray 时删除 input_core_dim。但是在内部,当您将其转换为 numpy 数组时,维度仍然存在
[85]
result
<xarray.DataArray 'reflectance' (y: 1082, x: 1084)>
dask.array<shape=(1082, 1084), dtype=uint16, chunksize=(1082, 1084)>
Coordinates:
band int64 1
* y (y) float64 9.705e+05 9.705e+05 9.705e+05 ... 9.673e+05 9.672e+05
* x (x) float64 4.889e+05 4.889e+05 4.889e+05 ... 4.922e+05 4.922e+05
[87]
# the shape of the xarray and numpy array do not match after apply_ufunc
np.array(result).shape
(1082, 1084, 44)
[['time', 'x', 'y']]
时为了纠正这个问题,我收到一个错误,看起来你不能让一个维度既是输入核心维度又是输出核心维度
[67]
bin_arr = np.linspace(configs.rmin, configs.rmax, 50)
blues = t_series['reflectance'].sel(band=1).chunk({'time':-1})
result = xr.apply_ufunc(partial(np.digitize, bins=bin_arr), blues, input_core_dims=[['time']], output_core_dims=[['time','x','y']], dask="parallelized", output_dtypes=[blues.dtype])
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
in
5 bin_arr = np.linspace(configs.rmin, configs.rmax, 50)
6 blues = t_series['reflectance'].sel(band=1).chunk({'time':-1})
----> 7 result = xr.apply_ufunc(partial(np.digitize, bins=bin_arr), blues, input_core_dims=[['time']], output_core_dims=[['time','x','y']], dask="parallelized", output_dtypes=[blues.dtype])
~/miniconda3/envs/pyatsa/lib/python3.7/site-packages/xarray/core/computation.py in apply_ufunc(func, input_core_dims, output_core_dims, exclude_dims, vectorize, join, dataset_join, dataset_fill_value, keep_attrs, kwargs, dask, output_dtypes, output_sizes, *args)
967 join=join,
968 exclude_dims=exclude_dims,
--> 969 keep_attrs=keep_attrs)
970 elif any(isinstance(a, Variable) for a in args):
971 return variables_vfunc(*args)
~/miniconda3/envs/pyatsa/lib/python3.7/site-packages/xarray/core/computation.py in apply_dataarray_vfunc(func, signature, join, exclude_dims, keep_attrs, *args)
215
216 data_vars = [getattr(a, 'variable', a) for a in args]
--> 217 result_var = func(*data_vars)
218
219 if signature.num_outputs > 1:
~/miniconda3/envs/pyatsa/lib/python3.7/site-packages/xarray/core/computation.py in apply_variable_ufunc(func, signature, exclude_dims, dask, output_dtypes, output_sizes, keep_attrs, *args)
539 if isinstance(arg, Variable)
540 else arg
--> 541 for arg, core_dims in zip(args, signature.input_core_dims)]
542
543 if any(isinstance(array, dask_array_type) for array in input_data):
~/miniconda3/envs/pyatsa/lib/python3.7/site-packages/xarray/core/computation.py in (.0)
539 if isinstance(arg, Variable)
540 else arg
--> 541 for arg, core_dims in zip(args, signature.input_core_dims)]
542
543 if any(isinstance(array, dask_array_type) for array in input_data):
~/miniconda3/envs/pyatsa/lib/python3.7/site-packages/xarray/core/computation.py in broadcast_compat_data(variable, broadcast_dims, core_dims)
493 'dimensions %r on an input variable: these are core '
494 'dimensions on other input or output variables'
--> 495 % unexpected_dims)
496
497 # for consistency with numpy, keep broadcast dimensions to the left
ValueError: operand to apply_ufunc encountered unexpected dimensions ['y', 'x'] on an input variable: these are core dimensions on other input or output variables
最佳答案
您要申请 digitize
在逐点的基础上。这是 apply_ufunc
最简单的用例.不需要特殊参数。
Numpy 版本
import numpy as np
import xarray as xr
ny, nx = 100, 100
nt = 44
data = xr.DataArray(np.random.randn(nt,ny,nx),
dims=['time', 'y', 'x'],
name='blue reflectance')
rmin, rmax, nbins = -4, 4, 50
bins = np.linspace(rmin, rmax, nbins)
data_digitized = xr.apply_ufunc(np.digitize, data, bins)
<xarray.DataArray 'blue reflectance' (time: 44, y: 100, x: 100)>
array([[[34, 17, ..., 27, 15],
....
[21, 24, ..., 23, 29]]])
Dimensions without coordinates: time, y, x
# create chunked dask version of data
data_chunked = data.chunk({'time': 1})
# use dask's version of digitize
import dask.array as da
xr.apply_ufunc(da.digitize, data_chunked, bins, dask='allowed')
# use xarray's built-in `parallelized` option on the numpy function
# (I needed to define a wrapper function to make this work,
# but I don't fully understand why.)
def wrap_digitize(data):
return np.digitize(data, bins)
xr.apply_ufunc(wrap_digitize, data_chunked,
dask='parallelized', output_dtypes=['i8'])
关于image-processing - 如何沿xarray.DataArray的时间维度对每个图像使用带有numpy.digitize的apply_ufunc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57419541/
我想使用批处理从文件夹中读取图像。但是解码后,当我使用tf.train.batch时可能会出现一些问题。这是代码。 def get_batch(image, label, batch_size, ca
我正在使用 tf.unsorted_segment_sum TensorFlow 的方法,当我作为数据给出的张量只有一行时,它工作正常。例如: tf.unsorted_segment_sum(tf.c
我想创建一个正则表达式来检查有效维度JavaScript 中的长度 x 宽度 x 高度。 例如90.49 x 34.93 x 40.64 我打算使用的示例代码: var dimensionRegex
ViewPager 是否必须是 Activity 布局中唯一存在的对象?我正在尝试实现这样的东西: 我应该在什么地方有一个大的寻呼机在顶部滚动(我有)和一个较小的画廊在它下面滚动。这只向我显示寻
据我所知,(维度、维度属性和事实)差异的最佳示例如下所示: 维度 - 产品、帐户、客户 维度属性 - ProductName、ProductNumber、CustomerName、CustomerNu
我是 Numpy 的新手,正在尝试理解什么是维度的基本问题, 我尝试了以下命令并试图理解为什么最后两个数组的 ndim 相同? >>> a= array([1,2,3]) >>> a.ndim 1 >
我对 MDX 比较陌生,正在尝试完成我认为应该很容易的事情,但我还没有找到任何解决方案。 我有一个销售立方体,其中一个衡量标准是利润,它可以是负数也可以是正数。我想得到一个有效的正利润总和的度量,即只
在大多数情况下,维度内层次结构的每个级别代表不同的概念(即国家->地区->城市、年->月->日),这很简单,可以在多维数据集中使用。 我感兴趣的是可变深度层次结构,它往往由相同概念的实例组成,即计算机
我正在尝试创建一个方法来总结潜在的项目并从数组返回该总和。以下是一些预期的示例输入: arraySum(new int[10]); // 10 arraySum(new int[2][5]); //
我正在尝试初始化一个二维数组(我创建的类对象),但我仍然遇到相同的运行时错误: Exception in thread "main" java.lang.NullPoointerException
(我是一名学生,这是我第一次发帖,所以请放轻松。)我想创建一个将二维数组作为参数的函数,并且在该数组中,我想要一个变量,稍后我想在代码中对其进行修改。这是最接近我想要的例子的东西: int size;
我想我可能会问一个虚拟问题,但我对 Android 编程还是个新手,而且我无法(尽管我付出了所有努力)在 Google 上找到我的答案。 问题是,我正在尝试使用 2D 图形开发一个小游戏。我希望我的“
如何使用 Crossfilter 过滤一系列日期?当我知道该时间段之间存在事实记录时,以下内容不起作用。 Var myDimension = CrossFilterObj.dimension(func
我正在启动另一个应用程序并设置其主要 HWND 位置和大小。我正在使用 STARTUPINFO指定窗口尺寸的标志,但看起来只有在新进程使用 CW_USEDEFAULT 时才会遵循这些尺寸在其 Crea
我正在尝试使用 Keras 构建我的第一个神经网络。我的经验为零,我似乎无法弄清楚为什么我的维度不对。我无法从他们的文档中弄清楚这个错误在提示什么,甚至是什么层导致了它。 我的模型接受一个 32 字节
我有一个水平导航栏,我的 a 元素没有扩展到父 li 元素的宽度和高度。 如何修改我的 CSS,使 a 元素与外部/父级 li 元素一样宽和高?
如何只更改需要 Dimension 对象的组件的宽度或高度?目前我是这样做的: jbutton.setPreferredSize(new Dimension(button.getPreferredSi
哪些 OLAP 工具支持动态、动态地创建维度或层次结构? 例如,层次结构将成员定义为:“前 5 名”、“前 6-10 名”、“其他”... 计算成员是通常的答案,我正在寻找不同的东西。计算器的问题。成
我使用 1 个 div 元素为我的网站制作 .background 。它的高度将是 100%。为了实现这一点,我使用 jQuery 尺寸实用程序。 用这个脚本来获取高度 $('.background
MultiArray与使用 std::vector 创建多数组相比,在 boost 中有很多优势。但是,我对 BOOST 中的 MultiArray 感到不舒服的一件事是创建一个可以轻松更改其大小的多
我是一名优秀的程序员,十分优秀!