小编Ngọ*_*yễn的帖子

如何在 Julia 中正确调用参数构造函数?

我想调用复合类型的构造函数,WeightedPool1D但我尝试了两者WeightedPool1D(mask)WeightedPool1D{Float64}(mask)但没有奏效。

谢谢!

朱莉娅版本:1.6.1

我的代码:

# creating composite type
struct WeightedPool1D{T}
    n::Int
    c::Int
    mask::Matrix{Bool}
    weight::Matrix{T}
    function WeightedPool1D(mask::Matrix{Bool}) where T
        c, n = size(mask)
        weight = randn(T, c, n) / n
        new{T}(n, c, mask, weight)
    end
end

# create argument
mask = zeros(Bool, 3, 3)
Run Code Online (Sandbox Code Playgroud)

调用w = WeightedPool1D(mask)给出错误

julia> w = WeightedPool1D(mask)
ERROR: UndefVarError: T not defined
Run Code Online (Sandbox Code Playgroud)

调用w = WeightedPool1D{Float64}(mask)给出错误

julia> w = WeightedPool1D{Float64}(mask)
ERROR: MethodError: no method matching WeightedPool1D{Float64}(::Matrix{Bool})
Run Code Online (Sandbox Code Playgroud)

julia

4
推荐指数
1
解决办法
43
查看次数

如何将构造函数添加到现有的基本类型?

我试图通过添加new方法来创建原始类型和对象类型usize

impl usize {
    fn new(value: &u32) -> usize {
        value as usize
    }
}
Run Code Online (Sandbox Code Playgroud)

我不知道这条消息想表达什么:

impl usize {
    fn new(value: &u32) -> usize {
        value as usize
    }
}
Run Code Online (Sandbox Code Playgroud)

type-conversion traits primitive-types rust rust-crates

3
推荐指数
1
解决办法
1990
查看次数

如何在 Rust 中使用数值作为泛型参数?

我作为初学者正在学习 Rust。我很好奇我们如何使用数值作为泛型参数,这些参数将在编译时编译,类似于 C++ 中的模板

这是等效的 C++ 代码。

template<class T, int dim>
struct vec {
    std::array<T, dim> data;
    vec(): data() {}
    vec(const vec<T, dim>& obj): data(obj.data) {}
    ~vec() {}
};
int main() {
    vec<float, 3> v3;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码将被编译为相同的

struct vec {
    std::array<float, 3> data;
    vec(): data() {}
    vec(const vec<float, 3>& obj): data(obj.data) {}
    ~vec() {}
};
int main() {
    vec v3;
}
Run Code Online (Sandbox Code Playgroud)

generics templates rust

3
推荐指数
1
解决办法
9468
查看次数

将大型char8的c数组转换为short16的最快方法是什么?

我的原始数据是一堆c数组(长度为1000000)(无符号)char(8位)。我想将它们加在一起(矢量加法),遵循以下代码中的规则。结果:(无符号)short(16位)的c数组。

我已经阅读了所有SSE和AVX / AVX2,但有一个类似的调用,即多个2个256位寄存器。前4个32位将相乘,每对32位的结果是一个64位,将适合256个寄存器。(_mm256_mul_epi32,_mm256_mul_epu32)

Firgure

https://www.codeproject.com/Articles/874396/Crunching-Numbers-with-AVX-and-AVX

样例代码:

static inline void adder(uint16_t *canvas, uint8_t *addon, uint64_t count)
{
    for (uint64_t i=0; i<count; i++)
        canvas[i] += static_cast<uint16_t>(addon[i]);
}
Run Code Online (Sandbox Code Playgroud)

谢谢

c c++ intel intrinsics

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