数组属性方法总结¶

作用
1 基本属性
a.dtype 数组元素类型 float32,uint8,…
a.shape 数组形状 (m,n,o,…)
a.size 数组元素数
a.itemsize 每个元素占字节数
a.nbytes 所有元素占的字节
a.ndim 数组维度
2 形状相关
a.flat 所有元素的迭代器
a.flatten() 返回一个1维数组的复制
a.ravel() 返回一个1维数组,高效
a.resize(new_size) 改变形状
a.swapaxes(axis1, axis2) 交换两个维度的位置
a.transpose(*axex) 交换所有维度的位置
a.T 转置,a.transpose()
a.squeeze() 去除所有长度为1的维度
3 填充复制
a.copy() 返回数组的一个复制
a.fill(value) 将数组的元组设置为特定值
4 转化
a.tolist() 将数组转化为列表
a.tostring() 转换为字符串
a.astype(dtype) 转化为指定类型
a.byteswap(False) 转换大小字节序
a.view(type_or_dtype) 生成一个使用相同内存,但使用不同的表示方法的数组
5 复数
a.imag 虚部
a.real 实部
a.conjugate() 复共轭
a.conj() 复共轭(缩写)
6 保存
a.dump(file) 将二进制数据存在file中
a.dump() 将二进制数据表示成字符串
a.tofile(fid, sep="",format="%s") 格式化ASCⅡ码写入文件
7 查找排序
a.nonzero() 返回所有非零元素的索引
a.sort(axis=-1) 沿某个轴排序
a.argsort(axis=-1) 沿某个轴,返回按排序的索引
a.searchsorted(b) 返回将b中元素插入a后能保持有序的索引值
8 元素数学操作
a.clip(low, high) 将数值限制在一定范围内
a.round(decimals=0) 近似到指定精度
a.cumsum(axis=None) 累加和
a.cumprod(axis=None) 累乘积
9 约简操作
a.sum(axis=None) 求和
a.prod(axis=None) 求积
a.min(axis=None) 最小值
a.max(axis=None) 最大值
a.argmin(axis=None) 最小值索引
a.argmax(axis=None) 最大值索引
a.ptp(axis=None) 最大值减最小值
a.mean(axis=None) 平均值
a.std(axis=None) 标准差
a.var(axis=None) 方差
a.any(axis=None) 只要有一个不为0,返回真,逻辑或
a.all(axis=None) 所有都不为0,返回真,逻辑与

In [1]:

  1. from numpy import *

基本属性¶

In [2]:

  1. a = array([[0, 1, 2, 3], [4, 5, 6, 7]])
  2. a

Out[2]:

  1. array([[0, 1, 2, 3],
  2. [4, 5, 6, 7]])

数组元素属性:

In [3]:

  1. a.dtype

Out[3]:

  1. dtype('int32')

形状:

In [4]:

  1. a.shape

Out[4]:

  1. (2L, 4L)

元素数目:

In [5]:

  1. a.size

Out[5]:

  1. 8

元素占字节大小:

In [6]:

  1. a.itemsize

Out[6]:

  1. 4

所有元素所占字节:

In [7]:

  1. a.nbytes

Out[7]:

  1. 32

数据维度:

In [8]:

  1. a.ndim

Out[8]:

  1. 2

形状相关¶

In [9]:

  1. for row in a:
  2. print row
  1. [0 1 2 3]
  2. [4 5 6 7]

所有元素的迭代器:

In [10]:

  1. for elt in a.flat:
  2. print elt
  1. 0
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7. 6
  8. 7

所有元素组成的一维数组,按照行排列:

In [11]:

  1. a.flatten()

Out[11]:

  1. array([0, 1, 2, 3, 4, 5, 6, 7])

In [12]:

  1. a.ravel()

Out[12]:

  1. array([0, 1, 2, 3, 4, 5, 6, 7])

重新改变形状:

In [13]:

  1. a.resize((4,2))
  2. a

Out[13]:

  1. array([[0, 1],
  2. [2, 3],
  3. [4, 5],
  4. [6, 7]])

交换这两个轴的顺序:

In [14]:

  1. a.swapaxes(0,1)

Out[14]:

  1. array([[0, 2, 4, 6],
  2. [1, 3, 5, 7]])

转置:

In [15]:

  1. a.transpose()

Out[15]:

  1. array([[0, 2, 4, 6],
  2. [1, 3, 5, 7]])

转置:

In [16]:

  1. a.T

Out[16]:

  1. array([[0, 2, 4, 6],
  2. [1, 3, 5, 7]])

In [17]:

  1. a2 = array([1,2,3])
  2. a2.shape

Out[17]:

  1. (3L,)

In [18]:

  1. a2.resize((1,3,1))
  2. a2.shape

Out[18]:

  1. (1L, 3L, 1L)

去除长度为1的维度:

In [19]:

  1. a2 = a2.squeeze()
  2. a2.shape

Out[19]:

  1. (3L,)

填充复制¶

复制:

In [20]:

  1. b = a.copy()
  2. b

Out[20]:

  1. array([[0, 1],
  2. [2, 3],
  3. [4, 5],
  4. [6, 7]])

复制不影响原来的数组:

In [21]:

  1. b[0][0] = -1
  2. b # First value changed

Out[21]:

  1. array([[-1, 1],
  2. [ 2, 3],
  3. [ 4, 5],
  4. [ 6, 7]])

In [22]:

  1. a # original not changed because b is a copy

Out[22]:

  1. array([[0, 1],
  2. [2, 3],
  3. [4, 5],
  4. [6, 7]])

填充:

In [23]:

  1. b.fill(4)
  2. b

Out[23]:

  1. array([[4, 4],
  2. [4, 4],
  3. [4, 4],
  4. [4, 4]])

转化¶

转化为列表:

In [24]:

  1. a.tolist()

Out[24]:

  1. [[0, 1], [2, 3], [4, 5], [6, 7]]

转化为字符串:

In [25]:

  1. a.tostring()

Out[25]:

  1. '\x00\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00'

改变数组元素类型:

In [26]:

  1. a.astype(float)

Out[26]:

  1. array([[ 0., 1.],
  2. [ 2., 3.],
  3. [ 4., 5.],
  4. [ 6., 7.]])

In [27]:

  1. b = a.copy()
  2. b.byteswap(False)

Out[27]:

  1. array([[ 0, 16777216],
  2. [ 33554432, 50331648],
  3. [ 67108864, 83886080],
  4. [100663296, 117440512]])

将它看成16位整数:

In [28]:

  1. a.view(dtype=int16)

Out[28]:

  1. array([[0, 0, 1, 0],
  2. [2, 0, 3, 0],
  3. [4, 0, 5, 0],
  4. [6, 0, 7, 0]], dtype=int16)

复数¶

实部:

In [29]:

  1. b = array([1+2j, 3+4j, 5+6j])
  2. b.real

Out[29]:

  1. array([ 1., 3., 5.])

虚部:

In [30]:

  1. b.imag

Out[30]:

  1. array([ 2., 4., 6.])

共轭:

In [31]:

  1. b.conj()

Out[31]:

  1. array([ 1.-2.j, 3.-4.j, 5.-6.j])

In [32]:

  1. b.conjugate()

Out[32]:

  1. array([ 1.-2.j, 3.-4.j, 5.-6.j])

保存¶

保存成文本:

In [33]:

  1. a.dump("file.txt")

字符串:

In [34]:

  1. a.dumps()

Out[34]:

  1. '\x80\x02cnumpy.core.multiarray\n_reconstruct\nq\x01cnumpy\nndarray\nq\x02K\x00\x85U\x01b\x87Rq\x03(K\x01\x8a\x01\x04\x8a\x01\x02\x86cnumpy\ndtype\nq\x04U\x02i4K\x00K\x01\x87Rq\x05(K\x03U\x01<NNNJ\xff\xff\xff\xffJ\xff\xff\xff\xffK\x00tb\x89U \x00\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00tb.'

写入文件:

In [35]:

  1. a.tofile('foo.csv', sep=',', format="%s")

查找排序¶

非零元素的索引:

In [36]:

  1. a.nonzero()

Out[36]:

  1. (array([0, 1, 1, 2, 2, 3, 3], dtype=int64),
  2. array([1, 0, 1, 0, 1, 0, 1], dtype=int64))

排序:

In [37]:

  1. b = array([3,2,7,4,1])
  2. b.sort()
  3. b

Out[37]:

  1. array([1, 2, 3, 4, 7])

排序的索引位置:

In [38]:

  1. b = array([2,3,1])
  2. b.argsort(axis=-1)

Out[38]:

  1. array([2, 0, 1], dtype=int64)

b 插入 a 中的索引,使得 a 保持有序:

In [39]:

  1. a = array([1,3,4,6])
  2. b = array([0,2,5])
  3. a.searchsorted(b)

Out[39]:

  1. array([0, 1, 3], dtype=int64)

元素数学操作¶

限制在一定范围:

In [40]:

  1. a = array([[4,1,3],[2,1,5]])
  2. a.clip(0,2)

Out[40]:

  1. array([[2, 1, 2],
  2. [2, 1, 2]])

近似:

In [41]:

  1. a = array([1.344, 2.449, 2.558])
  2. a.round(decimals=2)

Out[41]:

  1. array([ 1.34, 2.45, 2.56])

累加和:

In [42]:

  1. a = array([[4,1,3],[2,1,5]])
  2. a.cumsum(axis=None)

Out[42]:

  1. array([ 4, 5, 8, 10, 11, 16])

累乘积:

In [43]:

  1. a.cumprod(axis=None)

Out[43]:

  1. array([ 4, 4, 12, 24, 24, 120])

约简操作¶

求和:

In [44]:

  1. a = array([[4,1,3],[2,1,5]])
  2. a.sum(axis=None)

Out[44]:

  1. 16

求积:

In [45]:

  1. a.prod(axis=None)

Out[45]:

  1. 120

最小值:

In [46]:

  1. a.min(axis=None)

Out[46]:

  1. 1

最大值:

In [47]:

  1. a.max(axis=None)

Out[47]:

  1. 5

最小值索引:

In [48]:

  1. a.argmin(axis=None)

Out[48]:

  1. 1

最大值索引:

In [49]:

  1. a.argmax(axis=None)

Out[49]:

  1. 5

最大间隔:

In [50]:

  1. a.ptp(axis=None)

Out[50]:

  1. 4

均值:

In [51]:

  1. a.mean(axis=None)

Out[51]:

  1. 2.6666666666666665

标准差:

In [52]:

  1. a.std(axis=None)

Out[52]:

  1. 1.49071198499986

方差:

In [53]:

  1. a.var(axis=None)

Out[53]:

  1. 2.2222222222222228

是否有非零元素:

In [54]:

  1. a.any(axis=None)

Out[54]:

  1. True

是否全部非零:

In [55]:

  1. a.all()

Out[55]:

  1. True

删除生成的文件:

In [56]:

  1. import os
  2. os.remove('foo.csv')
  3. os.remove('file.txt')

原文: https://nbviewer.jupyter.org/github/lijin-THU/notes-python/blob/master/03-numpy/03.10-array-attribute-&-method-overview-.ipynb