数组属性方法总结¶
| 作用 |
|---|
|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,返回真,逻辑与
from numpy import *
基本属性¶
a = array([[0, 1, 2, 3], [4, 5, 6, 7]])
a
array([[0, 1, 2, 3],
[4, 5, 6, 7]])
数组元素属性:
a.dtype
dtype('int32')
形状:
a.shape
(2L, 4L)
元素数目:
a.size
8
元素占字节大小:
a.itemsize
4
所有元素所占字节:
a.nbytes
32
数据维度:
a.ndim
2
形状相关¶
for row in a:
print row
[0 1 2 3] [4 5 6 7]
所有元素的迭代器:
for elt in a.flat:
print elt
0 1 2 3 4 5 6 7
所有元素组成的一维数组,按照行排列:
a.flatten()
array([0, 1, 2, 3, 4, 5, 6, 7])
a.ravel()
array([0, 1, 2, 3, 4, 5, 6, 7])
重新改变形状:
a.resize((4,2))
a
array([[0, 1],
[2, 3],
[4, 5],
[6, 7]])
交换这两个轴的顺序:
a.swapaxes(0,1)
array([[0, 2, 4, 6],
[1, 3, 5, 7]])
转置:
a.transpose()
array([[0, 2, 4, 6],
[1, 3, 5, 7]])
转置:
a.T
array([[0, 2, 4, 6],
[1, 3, 5, 7]])
a2 = array([1,2,3])
a2.shape
(3L,)
a2.resize((1,3,1))
a2.shape
(1L, 3L, 1L)
去除长度为1的维度:
a2 = a2.squeeze()
a2.shape
(3L,)
填充复制¶
复制:
b = a.copy()
b
array([[0, 1],
[2, 3],
[4, 5],
[6, 7]])
复制不影响原来的数组:
b[0][0] = -1
b # First value changed
array([[-1, 1],
[ 2, 3],
[ 4, 5],
[ 6, 7]])
a # original not changed because b is a copy
array([[0, 1],
[2, 3],
[4, 5],
[6, 7]])
填充:
b.fill(4)
b
array([[4, 4],
[4, 4],
[4, 4],
[4, 4]])
转化¶
转化为列表:
a.tolist()
[[0, 1], [2, 3], [4, 5], [6, 7]]
转化为字符串:
a.tostring()
'\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'
改变数组元素类型:
a.astype(float)
array([[ 0., 1.],
[ 2., 3.],
[ 4., 5.],
[ 6., 7.]])
b = a.copy()
b.byteswap(False)
array([[ 0, 16777216],
[ 33554432, 50331648],
[ 67108864, 83886080],
[100663296, 117440512]])
将它看成16位整数:
a.view(dtype=int16)
array([[0, 0, 1, 0],
[2, 0, 3, 0],
[4, 0, 5, 0],
[6, 0, 7, 0]], dtype=int16)
复数¶
实部:
b = array([1+2j, 3+4j, 5+6j])
b.real
array([ 1., 3., 5.])
虚部:
b.imag
array([ 2., 4., 6.])
共轭:
b.conj()
array([ 1.-2.j, 3.-4.j, 5.-6.j])
b.conjugate()
array([ 1.-2.j, 3.-4.j, 5.-6.j])
保存¶
保存成文本:
a.dump("file.txt")
字符串:
a.dumps()
'\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.'
写入文件:
a.tofile('foo.csv', sep=',', format="%s")
查找排序¶
非零元素的索引:
a.nonzero()
(array([0, 1, 1, 2, 2, 3, 3], dtype=int64), array([1, 0, 1, 0, 1, 0, 1], dtype=int64))
排序:
b = array([3,2,7,4,1])
b.sort()
b
array([1, 2, 3, 4, 7])
排序的索引位置:
b = array([2,3,1])
b.argsort(axis=-1)
array([2, 0, 1], dtype=int64)
将 b 插入 a 中的索引,使得 a 保持有序:
a = array([1,3,4,6])
b = array([0,2,5])
a.searchsorted(b)
array([0, 1, 3], dtype=int64)
元素数学操作¶
限制在一定范围:
a = array([[4,1,3],[2,1,5]])
a.clip(0,2)
array([[2, 1, 2],
[2, 1, 2]])
近似:
a = array([1.344, 2.449, 2.558])
a.round(decimals=2)
array([ 1.34, 2.45, 2.56])
累加和:
a = array([[4,1,3],[2,1,5]])
a.cumsum(axis=None)
array([ 4, 5, 8, 10, 11, 16])
累乘积:
a.cumprod(axis=None)
array([ 4, 4, 12, 24, 24, 120])
约简操作¶
求和:
a = array([[4,1,3],[2,1,5]])
a.sum(axis=None)
16
求积:
a.prod(axis=None)
120
最小值:
a.min(axis=None)
1
最大值:
a.max(axis=None)
5
最小值索引:
a.argmin(axis=None)
1
最大值索引:
a.argmax(axis=None)
5
最大间隔:
a.ptp(axis=None)
4
均值:
a.mean(axis=None)
2.6666666666666665
标准差:
a.std(axis=None)
1.49071198499986
方差:
a.var(axis=None)
2.2222222222222228
是否有非零元素:
a.any(axis=None)
True
是否全部非零:
a.all()
True
删除生成的文件:
import os
os.remove('foo.csv')
os.remove('file.txt')