Ejemplo n.º 1
0
    Array<T>* resize(const Array<T> &in, const dim_type odim0, const dim_type odim1,
                     const af_interp_type method)
    {
        af::dim4 idims = in.dims();
        af::dim4 odims(odim0, odim1, idims[2], idims[3]);

        // Create output placeholder
        Array<T> *outArray = createValueArray(odims, (T)0);

        // Get pointers to raw data
        const T *inPtr = in.get();
              T *outPtr = outArray->get();

        af::dim4 ostrides = outArray->strides();
        af::dim4 istrides = in.strides();

        switch(method) {
            case AF_INTERP_NEAREST:
                resize_<T, AF_INTERP_NEAREST>(outPtr, inPtr, odims, idims, ostrides, istrides);
                break;
            case AF_INTERP_BILINEAR:
                resize_<T, AF_INTERP_BILINEAR>(outPtr, inPtr, odims, idims, ostrides, istrides);
                break;
            default:
                break;
        }
        return outArray;
    }
Ejemplo n.º 2
0
    Array<T>  diff2(const Array<T> &in, const int dim)
    {
        // Bool for dimension
        bool is_dim0 = dim == 0;
        bool is_dim1 = dim == 1;
        bool is_dim2 = dim == 2;
        bool is_dim3 = dim == 3;

        // Decrement dimension of select dimension
        af::dim4 dims = in.dims();
        dims[dim] -= 2;

        // Create output placeholder
        Array<T> outArray = createValueArray(dims, (T)0);

        // Get pointers to raw data
        const T *inPtr = in.get();
              T *outPtr = outArray.get();

        // TODO: Improve this
        for(dim_t l = 0; l < dims[3]; l++) {
            for(dim_t k = 0; k < dims[2]; k++) {
                for(dim_t j = 0; j < dims[1]; j++) {
                    for(dim_t i = 0; i < dims[0]; i++) {
                        // Operation: out[index] = in[index + 1 * dim_size] - in[index]
                        int idx = getIdx(in.strides(), in.offsets(), i, j, k, l);
                        int jdx = getIdx(in.strides(), in.offsets(),
                                         i + is_dim0, j + is_dim1,
                                         k + is_dim2, l + is_dim3);
                        int kdx = getIdx(in.strides(), in.offsets(),
                                         i + 2 * is_dim0, j + 2 * is_dim1,
                                         k + 2 * is_dim2, l + 2 * is_dim3);
                        int odx = getIdx(outArray.strides(), outArray.offsets(), i, j, k, l);
                        outPtr[odx] = inPtr[kdx] + inPtr[idx] - inPtr[jdx] - inPtr[jdx];
                    }
                }
            }
        }

        return outArray;
    }
Ejemplo n.º 3
0
Array<T> resize(const Array<T> &in, const dim_t odim0, const dim_t odim1,
                const af_interp_type method)
{
    af::dim4 idims = in.dims();
    af::dim4 odims(odim0, odim1, idims[2], idims[3]);
    // Create output placeholder
    Array<T> out = createValueArray(odims, (T)0);
    out.eval();
    in.eval();

    switch(method) {
        case AF_INTERP_NEAREST:
            getQueue().enqueue(kernel::resize<T, AF_INTERP_NEAREST>, out, in); break;
        case AF_INTERP_BILINEAR:
            getQueue().enqueue(kernel::resize<T, AF_INTERP_BILINEAR>, out, in); break;
        case AF_INTERP_LOWER:
            getQueue().enqueue(kernel::resize<T, AF_INTERP_LOWER>, out, in); break;
        default: break;
    }
    return out;
}