Exemple #1
0
def etensor_to_numpy(et):
    """
    returns a numpy ndarray constructed from the given etensor.Tensor.
    data is copied into the numpy ndarray -- it is not a view.
    """
    nar = 0
    if et.DataType() == etensor.UINT8:
        nar = np.array(etensor.Uint8(et).Values, dtype=np.uint8)
    elif et.DataType() == etensor.INT8:
        nar = np.array(etensor.Int8(et).Values, dtype=np.int8)
    elif et.DataType() == etensor.UINT16:
        nar = np.array(etensor.Uint16(et).Values, dtype=np.uint16)
    elif et.DataType() == etensor.INT16:
        nar = np.array(etensor.Int16(et).Values, dtype=np.int16)
    elif et.DataType() == etensor.UINT32:
        nar = np.array(etensor.Uint32(et).Values, dtype=np.uint32)
    elif et.DataType() == etensor.INT32:
        nar = np.array(etensor.Int32(et).Values, dtype=np.int32)
    elif et.DataType() == etensor.UINT64:
        nar = np.array(etensor.Uint64(et).Values, dtype=np.uint64)
    elif et.DataType() == etensor.INT64:
        nar = np.array(etensor.Int64(et).Values, dtype=np.int64)
    elif et.DataType() == etensor.FLOAT32:
        nar = np.array(etensor.Float32(et).Values, dtype=np.float32)
    elif et.DataType() == etensor.FLOAT64:
        nar = np.array(etensor.Float64(et).Values, dtype=np.float64)
    elif et.DataType() == etensor.STRING:
        nar = np.array(etensor.String(et).Values)
    elif et.DataType() == etensor.INT:
        nar = np.array(etensor.Int(et).Values, dtype=np.intc)
    elif et.DataType() == etensor.BOOL:
        etb = etensor.Bits(et)
        sz = etb.Len()
        nar = np.zeros(sz, dtype=np.bool_)
        for i in range(sz):
            nar[i] = etb.Value1D(i)
    else:
        raise TypeError("tensor with type %s cannot be converted" %
                        (et.DataType().String()))
        return 0
    # there does not appear to be a way to set the shape at the same time as initializing
    return nar.reshape(et.Shapes())
Exemple #2
0
def copy_numpy_to_etensor(et, nar):
    """
    copies data from numpy ndarray (nar, source) to existing etensor.Tensor (et, dest) 
    """
    narf = np.reshape(nar, -1)
    etv = et
    if et.DataType() == etensor.UINT8:
        etv = etensor.Uint8(et).Values
    elif et.DataType() == etensor.INT8:
        etv = etensor.Int8(et).Values
    elif et.DataType() == etensor.UINT16:
        etv = etensor.Uint16(et).Values
    elif et.DataType() == etensor.INT16:
        etv = etensor.Int16(et).Values
    elif et.DataType() == etensor.UINT32:
        etv = etensor.Uint32(et).Values
    elif et.DataType() == etensor.INT32:
        etv = etensor.Int32(et).Values
    elif et.DataType() == etensor.UINT64:
        etv = etensor.Uint64(et).Values
    elif et.DataType() == etensor.INT64:
        etv = etensor.Int64(et).Values
    elif et.DataType() == etensor.FLOAT32:
        etv = etensor.Float32(et).Values
    elif et.DataType() == etensor.FLOAT64:
        etv = etensor.Float64(et).Values
    elif et.DataType() == etensor.STRING:
        etv = etensor.String(et).Values
    elif et.DataType() == etensor.INT:
        etv = etensor.Int(et).Values
    elif et.DataType() == etensor.BOOL:
        etb = etensor.Bits(et)
        sz = min(etb.Len(), len(narf))
        for i in range(sz):
            narf[i] = etb.Value1D(i)
        return
    else:
        raise TypeError("tensor with type %s cannot be copied" %
                        (et.DataType().String()))
        return 0
    etv.copy(narf)  # go slice copy, not python copy = clone