zoukankan      html  css  js  c++  java
  • np.c_ 这个玩意儿不是个方法,而是返回一个类然后直接和后面的ndarry相乘。。。相当于concatenate(【】,dim)

    import numpy as np
    # from tensorflow import keras
    
    X = np.random.randint(100, size=10*1000).reshape(1000, 10)
    Y = np.random.randint(100, size=15*1000).reshape(1000, 15)
    X_decoder = np.c_[np.zeros((1000, 1)), Y[:, :-1]]
    seq_lengths = np.full([1000], 15)
    print(X)
    
    # history = model.fit([X, X_decoder, seq_lengths], Y, epochs=2)
    '''(1,3) 和 (1,3) 变 (1,6)'''
    qq = np.c_[np.array([[1,2,3]]), 0, 0, np.array([[4,5,6]])]
    print(qq)
    D:ProgramDataMiniconda3python.exe E:/新脚本主文件夹/训练测试项目/test3/测试乱七八糟的3.py
    [[65 97 98 ... 78 15 79]
     [92 18 68 ...  6 41 21]
     [ 9 20 49 ... 95 99 91]
     ...
     [29 17 53 ...  6 68 41]
     [48 72  2 ... 62  6 22]
     [60  3 19 ... 55 74 49]]
    [[1 2 3 0 0 4 5 6]]
    
    Process finished with exit code 0

     np.c_ 这个玩意儿不是个方法,而是返回一个类然后直接和后面的ndarry相乘。。。相当于concatenate(【】,dim):

    c_ = concatenate([np.zeros((1000, 1)), Y[:, :-1]],1)
    print(c_)

    r_和c_里面源码是这样的,虽然我看不太懂。。。。

    class AxisConcatenator:
        """
        Translates slice objects to concatenation along an axis.
    
        For detailed documentation on usage, see `r_`.
        """
        # allow ma.mr_ to override this
        concatenate = staticmethod(_nx.concatenate)
        makemat = staticmethod(matrixlib.matrix)
    
        def __init__(self, axis=0, matrix=False, ndmin=1, trans1d=-1):
            self.axis = axis
            self.matrix = matrix
            self.trans1d = trans1d
            self.ndmin = ndmin
    
        def __getitem__(self, key):
            # handle matrix builder syntax
            if isinstance(key, str):
                frame = sys._getframe().f_back
                mymat = matrixlib.bmat(key, frame.f_globals, frame.f_locals)
                return mymat
    
            if not isinstance(key, tuple):
                key = (key,)
    
            # copy attributes, since they can be overridden in the first argument
            trans1d = self.trans1d
            ndmin = self.ndmin
            matrix = self.matrix
            axis = self.axis
    
            objs = []
            scalars = []
            arraytypes = []
            scalartypes = []
    
            for k, item in enumerate(key):
                scalar = False
                if isinstance(item, slice):
                    step = item.step
                    start = item.start
                    stop = item.stop
                    if start is None:
                        start = 0
                    if step is None:
                        step = 1
                    if isinstance(step, complex):
                        size = int(abs(step))
                        newobj = linspace(start, stop, num=size)
                    else:
                        newobj = _nx.arange(start, stop, step)
                    if ndmin > 1:
                        newobj = array(newobj, copy=False, ndmin=ndmin)
                        if trans1d != -1:
                            newobj = newobj.swapaxes(-1, trans1d)
                elif isinstance(item, str):
                    if k != 0:
                        raise ValueError("special directives must be the "
                                "first entry.")
                    if item in ('r', 'c'):
                        matrix = True
                        col = (item == 'c')
                        continue
                    if ',' in item:
                        vec = item.split(',')
                        try:
                            axis, ndmin = [int(x) for x in vec[:2]]
                            if len(vec) == 3:
                                trans1d = int(vec[2])
                            continue
                        except Exception as e:
                            raise ValueError(
                                "unknown special directive {!r}".format(item)
                            ) from e
                    try:
                        axis = int(item)
                        continue
                    except (ValueError, TypeError):
                        raise ValueError("unknown special directive")
                elif type(item) in ScalarType:
                    newobj = array(item, ndmin=ndmin)
                    scalars.append(len(objs))
                    scalar = True
                    scalartypes.append(newobj.dtype)
                else:
                    item_ndim = ndim(item)
                    newobj = array(item, copy=False, subok=True, ndmin=ndmin)
                    if trans1d != -1 and item_ndim < ndmin:
                        k2 = ndmin - item_ndim
                        k1 = trans1d
                        if k1 < 0:
                            k1 += k2 + 1
                        defaxes = list(range(ndmin))
                        axes = defaxes[:k1] + defaxes[k2:] + defaxes[k1:k2]
                        newobj = newobj.transpose(axes)
                objs.append(newobj)
                if not scalar and isinstance(newobj, _nx.ndarray):
                    arraytypes.append(newobj.dtype)
    
            # Ensure that scalars won't up-cast unless warranted
            final_dtype = find_common_type(arraytypes, scalartypes)
            if final_dtype is not None:
                for k in scalars:
                    objs[k] = objs[k].astype(final_dtype)
    
            res = self.concatenate(tuple(objs), axis=axis)
    
            if matrix:
                oldndim = res.ndim
                res = self.makemat(res)
                if oldndim == 1 and col:
                    res = res.T
            return res
    
        def __len__(self):
            return 0
    
    # separate classes are used here instead of just making r_ = concatentor(0),
    # etc. because otherwise we couldn't get the doc string to come out right
    # in help(r_)

    注意下倒数第三行源码有错误,就是那个注释,里面写的concatentor应该是concatenate

    然后调用的类很简单,如下,在同一个文件里,indextricks.py

    class CClass(AxisConcatenator):
        """
        Translates slice objects to concatenation along the second axis.
    
        This is short-hand for ``np.r_['-1,2,0', index expression]``, which is
        useful because of its common occurrence. In particular, arrays will be
        stacked along their last axis after being upgraded to at least 2-D with
        1's post-pended to the shape (column vectors made out of 1-D arrays).
        
        See Also
        --------
        column_stack : Stack 1-D arrays as columns into a 2-D array.
        r_ : For more detailed documentation.
    
        Examples
        --------
        >>> np.c_[np.array([1,2,3]), np.array([4,5,6])]
        array([[1, 4],
               [2, 5],
               [3, 6]])
        >>> np.c_[np.array([[1,2,3]]), 0, 0, np.array([[4,5,6]])]
        array([[1, 2, 3, ..., 4, 5, 6]])
    
        """
    
        def __init__(self):
            AxisConcatenator.__init__(self, -1, ndmin=2, trans1d=0)
    
    
    c_ = CClass()

    就是返回了一个上面的类,然而很高级的样子,也看不太懂。。。。

  • 相关阅读:
    Rancher之Pipeline JAVA demo
    rancher使用fluentd-pilot收集日志分享
    SFTP 命令列表以备查询
    WPF中异步更新UI元素
    Android 开发环境在 Windows7 下的部署安装
    Android Studio vs. Eclipse ADT Comparison
    JQuery 滚动条插件perfect-scrollbar
    nginx+php 在windows下的简单配置安装
    MySql 管理操作常用命令
    JS事件调试
  • 原文地址:https://www.cnblogs.com/DDBD/p/13931695.html
Copyright © 2011-2022 走看看