• numpy 札记


    • transpose

    在处理caffe读入的图片数据时,需要将原始图片的数据

    H*W*3(height*width*RGB) 转换为 3*H*W(RGB*heigth*width)

    需要用到numpy的transpose功能:设想图片尺寸2x2,RGB模式 则数组规模为2x2x3

    >>>import numpy as np
    >>> x = np.arange(12).reshape(2,2,3)
    >>> x
    array([[[ 0,  1,  2],
            [ 3,  4,  5]],
    
           [[ 6,  7,  8],
            [ 9, 10, 11]]])
    >>> x_ = np.transpose(x,(2,0,1))
    >>> x_
    array([[[ 0,  3],
            [ 6,  9]],
    
           [[ 1,  4],
            [ 7, 10]],
    
           [[ 2,  5],
            [ 8, 11]]])
    >>> 

    transpose的实现原理其实很简单,只要保存一个view即可,例如原索引是i,j,k,按照“(2,0,1)” transpose后,索引便成为k,i,j,即Ai,j,k = ATk,i,j ,可以用上面的例子试验。

    • 多维数组指定axies上元素顺序的调换(例如RGB->BGR):

    还有一个问题,在caffe中根据convention使用BGR的通道模式,所以对如上x_做0轴上的变换

    >>> x_.shape
    (3, 2, 2)
    >>> x_[(2,1,0),:,:]
    array([[[ 2,  5],
            [ 8, 11]],
    
           [[ 1,  4],
            [ 7, 10]],
    
           [[ 0,  3],
            [ 6,  9]]])
    >>> 

    调换选定轴上元素的位置其实很方便,在指定轴位置放置指示顺序的tuple即可,其他轴保持(使用":")。

    例如将上面的2x2矩阵上下两行对调

    >>> x_
    array([[[ 0,  3],
            [ 6,  9]],
    
           [[ 1,  4],
            [ 7, 10]],
    
           [[ 2,  5],
            [ 8, 11]]])
    >>> x_.shape
    (3, 2, 2)
    >>> x_[:,(1,0),:]
    array([[[ 6,  9],
            [ 0,  3]],
    
           [[ 7, 10],
            [ 1,  4]],
    
           [[ 8, 11],
            [ 2,  5]]])
    >>> 
    •  两个元素个数相同但维数不同的数组赋值

    例如'x_flat'是维数为(12,)的行向量,现在想将上面的2x2x3数组'x_'复制给'x_flat'而不改变'x_flat'的内存空间,可如下:

    >>> x_flat = np.arange(12)
    >>> x_flat.shape
    (12,)
    >>> x_flat
    array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
    >>> x_
    array([[[ 0,  3],
            [ 6,  9]],
    
           [[ 1,  4],
            [ 7, 10]],
    
           [[ 2,  5],
            [ 8, 11]]])
    >>> x_flat.flat = x_.flat
    >>> x_flat
    array([ 0,  3,  6,  9,  1,  4,  7, 10,  2,  5,  8, 11])
  • 相关阅读:
    八、drop和alter
    undefined reference to ****
    cgdb的认识
    ping: unknown host www.baidu.com
    ubuntu mysql汉字写入只写入了一个字符
    gdb map.insert方法运行异常:program received signal segmentation fault
    ubuntu环境下c++ 模板特化的编写
    putty fatal error software caused connection
    ubuntu共享文件夹不能被访问,其他主机ping不通该服务器
    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 问题
  • 原文地址:https://www.cnblogs.com/vin-yuan/p/5066922.html
Copyright © 2020-2023  润新知