小编Sys*_*123的帖子

沿 XArray 的时间维度应用函数

我有一个图像堆栈存储在尺寸为时间、x、y 的 XArray DataArray 中,我想在其中沿每个像素的时间轴应用自定义函数,以便输出是尺寸为 x、y 的单个图像。

我尝试过: apply_ufunc 但该函数失败,说明我需要首先将数据加载到 RAM 中(即无法使用 Dask 数组)。理想情况下,我希望在内部将 DataArray 保留为 Dask 数组,因为不可能将整个堆栈加载到 RAM 中。确切的错误消息是:

ValueError: apply_ufunc 在参数上遇到 dask 数组,但尚未启用 dask 数组的处理。设置参数或首先使用或dask将数据加载到内存中.load().compute()

我的代码目前如下所示:

import numpy as np
import xarray as xr
import pandas as pd 

def special_mean(x, drop_min=False):
    s = np.sum(x)
    n = len(x)
    if drop_min:
    s = s - x.min()
    n -= 1
    return s/n

times = pd.date_range('2019-01-01', '2019-01-10', name='time')

data = xr.DataArray(np.random.rand(10, 8, 8), dims=["time", "y", "x"], coords={'time': times}) …
Run Code Online (Sandbox Code Playgroud)

dask python-xarray

6
推荐指数
1
解决办法
8620
查看次数

在 Ruby 中复制哈希

我试图通过使用另一个具有默认值的哈希来初始化 ruby​​ 中的哈希。我想要一个深副本,但我似乎只得到一个浅副本。

这是一个例子:

DEFAULT_HASH = { a: 0, b: 1 }.freeze
my_hash = DEFAULT_HASH.dup
my_hash[:a] = 4 
Run Code Online (Sandbox Code Playgroud)

现在“my_hash”和 DEFAULT_HASH 中的 a 值是 4。我只希望哈希中的值发生变化。

我也尝试过其他方法:

my_hash = {}.merge DEFAULT_HASH
Run Code Online (Sandbox Code Playgroud)

my_hash.merge! DEFAULT_HASH
Run Code Online (Sandbox Code Playgroud)

所有这些都会产生相同的效果。实现这种初始化的最佳方法是什么?我还使用嵌套哈希,这增加了一点复杂性。

即我的 DEFAULT_HASH 看起来像:

DEFAULT_HASH = { a:{a:1, b:2}, b:{a:2, b:1} }
Run Code Online (Sandbox Code Playgroud)

这会影响如何做到这一点吗?

编辑:嵌套哈希案例

DEFAULT_HASH = { a:{a:1, b:2}, b:{a:2, b:1} }
=> {:a=>{:a=>1, :b=>2}, :b=>{:a=>2, :b=>1}} 
a=DEFAULT_HASH.dup
=> {:a=>{:a=>1, :b=>2}, :b=>{:a=>2, :b=>1}} 
a[:b][:a]=12
=> 12 
DEFAULT_HASH
=> {:a=>{:a=>1, :b=>2}, :b=>{:a=>12, :b=>1}} 
Run Code Online (Sandbox Code Playgroud)

ruby hash

5
推荐指数
1
解决办法
3798
查看次数

OpenCV使用stride从数组生成cv :: Mat

我有RGBA格式的像素数据数组.虽然我已经使用GPU将这些数据转换为灰度(因此所有4个通道都是相同的).

我现在想在OpenCV中使用这个灰度数据,我不想存储4个相同数据的副本.是否可以通过指定步幅从此像素阵列创建cv :: Mat结构.(即每4字节仅读出一次)

我目前正在使用

GLubyte* Img = stuff from GPU;
cv::Mat tmp(height, width, CV_8UC4, Img);
Run Code Online (Sandbox Code Playgroud)

但是这会复制所有数据,还是将现有指针包装成cv :: Mat而不复制它?如果它包装没有副本,那么我将很乐意使用标准的c ++例程将我想要的数据从Img复制到一个新的内存部分,然后将其包装为cv :: Mat.

否则,您会如何建议这样做以减少复制的数据量.

谢谢

c++ opencv

2
推荐指数
1
解决办法
2102
查看次数

标签 统计

c++ ×1

dask ×1

hash ×1

opencv ×1

python-xarray ×1

ruby ×1