• 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])

numpy 札记的更多相关文章

  1. 利用Python进行数据分析(5) NumPy基础: ndarray索引和切片

    概念理解 索引即通过一个无符号整数值获取数组里的值. 切片即对数组里某个片段的描述. 一维数组 一维数组的索引 一维数组的索引和Python列表的功能类似: 一维数组的切片 一维数组的切片语法格式为a ...

  2. 利用Python进行数据分析(4) NumPy基础: ndarray简单介绍

    一.NumPy 是什么 NumPy 是 Python 科学计算的基础包,它专为进行严格的数字处理而产生.在之前的随笔里已有更加详细的介绍,这里不再赘述. 利用 Python 进行数据分析(一)简单介绍 ...

  3. 利用Python进行数据分析(6) NumPy基础: 矢量计算

    矢量化指的是用数组表达式代替循环来操作数组里的每个元素. NumPy提供的通用函数(既ufunc函数)是一种对ndarray中的数据进行元素级别运算的函数. 例如,square函数计算各元素的平方,r ...

  4. python安装numpy、scipy和matplotlib等whl包的方法

    最近装了python和PyCharm开发环境,但是在安装numpy和matplotlib等包时出现了问题,现总结一下在windows平台下的安装方法. 由于现在找不到了工具包新版本的exe文件,所以采 ...

  5. 深入理解numpy

    一.为啥需要numpy python虽然说注重优雅简洁,但它终究是需要考虑效率的.别说运行速度不是瓶颈,在科学计算中运行速度就是瓶颈. python的列表,跟java一样,其实只是一维列表.一维列表相 ...

  6. Python Numpy,Pandas基础笔记

    Numpy Numpy是python的一个库.支持维度数组与矩阵计算并提供大量的数学函数库. arr = np.array([[1.2,1.3,1.4],[1.5,1.6,1.7]])#创建ndarr ...

  7. broadcasting Theano vs. Numpy

    broadcasting Theano vs. Numpy broadcast mechanism allows a scalar may be added to a matrix, a vector ...

  8. python之numpy

    一.矩阵的拼接合并 列拼接:np.column_stack() >>> import numpy as np >>> a = np.arange(9).reshap ...

  9. win7系统下python安装numpy,matplotlib,scipy和scikit-learn

    1.安装numpy,matplotlib,scipy和scikit-learn win7系统下直接采用pip或者下载源文件进行安装numpy,matplotlib,scipy时会遇到各种问题,这是因为 ...

随机推荐

  1. 去掉UItableview headerview黏性

    //去掉UItableview headerview黏性 - (void)scrollViewDidScroll:(UIScrollView *)scrollView { if (scrollView ...

  2. 端口扫描器之java实现

    端口扫描器之java实现   import java.net.*;import java.io.*;import java.awt.*;import java.awt.event.*;import j ...

  3. 检索n以内所有素数

    #include <iostream>#include <cmath> const int N=500000;//数组大小 using namespace std; int m ...

  4. Do Palapala (this)

    Description 伟大的中国人民有宝箱容量为S(0<=S<=20000),有m个物品(0<m<=30,每个物品有一个体积(正整数).任取若干个装入箱内,使箱子的剩余空间为 ...

  5. linux 下 安装nexus

    1. 获得root权限  [ferrari@localhost ~]$ su -   2. 下载nexus集成版  [root@localhost ~]# cd /usr/local  [root@l ...

  6. spring+hibernate

    添加注解时spring是添加在set方法上而hibernate是添加在get方法上 事务应该加在service层上,而不是加在dao层上,如果加在dao层上回滚的时候只能回滚一个dao的实现. 事务处 ...

  7. ajax接收遍历处理json格式数据

    ajax在前后端的交互中应用非常广泛,通过请求后台接口接收处理json格式数据展现在前端页面. 下面我们来简单用 ajax在本地做一个接收并处理json的小例子 首先我们要新建一个叫做data的jso ...

  8. PHP框架学习之Laravel安装

    自从接触PHP以来一直使用Yii,感觉Yii实现功能比较简单,是一个很不错的框架.最近由于工作的原因开始研究Laravel5,不得不说我在第一步安装就被坑着了,下面就是我痛苦的学习成果.Laravel ...

  9. div模拟textarea以实现高度自适应实例页面

    作为多行文本域功能来讲,textarea满足了我们大部分的需求.然而,textarea有一个不足就是不能像普通div标签一样高度可以跟随内容自适应.textarea总是很自信地显摆它的滚动条,高度固执 ...

  10. linux判断日期是否合法

    #include <time.h> #include <stdio.h> typedef enum { , } bool; bool check_date(int year, ...