python学习--numpy的数组

numpy中的数组类型为ndarry

创建

复制代码
# -*- coding: utf-8 -*-
import numpy as np

#用列表或元组创建
a = np.array([[1,2,3],[4,5,6]])
b = np.array([1,2],dtype=complex)

#类似内置函数range
c = np.arange(24).reshape(2,3,4)

#等差,等比数组
d = np.linspace(0,1,10,endpoint=False)
print np.logspace(0,4,3,base=2)

#创建特殊数组
print np.zeros((2,3))
print np.zeros_like(a)
print np.ones((2,3),dtype=np.int16) #全1
print np.empty((2,3))
print np.eye(3) #单位阵

#从字符串,函数,文件等创建
s ='abcdef'
print np.fromstring(s,dtype=np.int8)
print np.fromfunction(lambda i,j:(i+1)*(j+1), (9,9))
#fromfile从二进制文件中创建,tofile写入文件

#从文件创建
np.savetxt('123.txt',a) #存为文本
e = np.loadtxt('123.txt')

#文件操作还有savez,save,load
np.save('c.npy', c) #存为二进制,后缀不可变
c = np.load('c.npy')
print c

np.savez('c.npz', c,d) #存储多个数组
d = np.load('c.npz')
print d['arr_0'], d['arr_1']

c.tofile('c.bin')
c = np.fromfile('c.bin',dtype=np.int32) #读出来是一维的
print c

#创建随机数组
print np.random.random((2,3))

#结构体数组
persontype = np.dtype({'names':['name','age','weight'], 'formats':['S30','i','f']}, align=True)
f = np.array([('zhang',32,75.5), ('wang',24,65.2)], dtype=persontype)
print f
print f['name']
print f[0]['age']
复制代码

 

属性

复制代码
# -*- coding: utf-8 -*-
import numpy as np

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

print a.ndim #维数
print a.shape #(3,2) 每个维数的长度
print a.size #元素个数
print a.dtype #float64,元素类型.所有类型可通过set(np.typeDict.values())查看
print a.itemsize #每个元素的字节数
print a.data #缓冲区地址
复制代码

使用

复制代码
# -*- coding: utf-8 -*-
import numpy as np

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

print a[1][2]
index = (1,2)
print a[index]
print a[0:2,1]
print a[:,[0,2]] #取第0和2列
print a[1]
print a[...,1]

for row in a:
    print row
for element in a.flat:
    print element

b = a>4
a[b] = 0
print a
复制代码

操作

复制代码
# -*- coding: utf-8 -*-
import numpy as np

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

#改变大小
a.ravel() #展平为1维数组
print a
a.shape = (3,2) #元素在内存中的位置并没有改变
print a.reshape(2,-1) #a不动,返回改变形状后的数组,-1对应的维自动计算
a.resize((2,3))
print a

#组合
b = np.floor(10*np.random.random((2,3)))
print np.vstack((a,b))
print np.hstack((a,b))
#类似还有concatenate, r_, c_

#分割
print np.hsplit(a,3)

#复制
c = a #c跟a完全相同
print c is a
c = a.view() #c跟a虽是不同数组,但c跟a公用数据.
c = a.copy() #深拷贝,c跟a完全不同
print a.repeat(3,axis=0)

a = np.array([1,2,3,4,5])
b = np.array([2,4,7])
ax,bx = np.ix_(a,b)
print ax.shape
print ax*bx

#产生能快速广播的数组
x,y = np.ogrid[:1:4j, :1:3j] #和arange类似,三个产生是开始值,结束值,步长,步长为虚数表示长度
print x
print y
print 2*x + y
x,y = np.mgrid[:1:4j, :1:3j] #与ogrid不同的是,它返回的是广播后的数组
print x
print y
复制代码

 

运算

复制代码
# -*- coding: utf-8 -*-
import numpy as np

a = np.array([[4,3],[2,1]])
b = np.array([[1,1],[0,1]])

#逻辑运算
print np.logical_or(a==b, a<b)
print np.any(a==b)
print np.all(a>b)

#对每个元素操作
print a<3
print a**2
print a*b
a *= 3
np.add(a,b,a)
print a

#通用函数
print np.exp(a)
print np.sort(a) #对每行排序
'''
当使用ufunc函数对两个数组进行计算时,ufunc函数会对这两个数组的对应元素进行计算,因此它要求这两个数组的形状相同。如果形状不同,会进行如下的广播(broadcasting)处理:
1. 让所有输入数组都向其中维数最多的数组看齐,shape属性中不足的部分都通过在前面加1补齐。
2. 输出数组的shape属性是输入数组的shape属性的各个轴上的最大值。
3. 如果输入数组的某个轴的长度为1或与输出数组的对应轴的长度相同时,这个数组能够用来计算,否则出错。
4. 当输入数组的某个轴的长度为1时,沿着此轴运算时都用此轴上的第一组值。
'''
#将a视为1维数组
print a.max() #a.func()等同于np.func(a)
print a.argmin()
print a.sum()
#以下4个为统计函数
print a.mean()
print a.var()
print a.std()
print np.cov(a)
#也可以对指定的维操作,例如
print a.sum(axis=0)
print np.add.reduce(a,axis=1)
print np.add.accumulate(a,axis=1) #于reduce不同的是它保留中间结果

print np.inner(a,a) #计算两个数组最后1维的内积
print np.multiply.outer([1,2,3,4,5],[2,3,4]) #先使第一个参数的shape变为(5,1),再multiply,再执行squeeze剔除长度为1的轴
复制代码

 

线性代数

复制代码
# -*- coding: utf-8 -*-
import numpy as np
import numpy.matlib

a = np.array([[1.,2.],[3.,4.]])
b = np.array([[1,1],[0,1]])

print a.transpose()
print np.trace(a)
print a.trace()
print np.linalg.det(a)
print np.linalg.eig(a) #特征向量和特征值
print np.dot(a,b) #矩阵乘法
#解方程组
y = np.array([[5.],[7,]])
print np.linalg.solve(a,y)
#linalg更多函数见http://docs.scipy.org/doc/numpy/reference/routines.linalg.html

#矩阵类继承自2维数组
A = np.mat(a)
print A.T
print A.I
X = np.matrix('5 6; 7 8').T
print A*X
print A[:,1] #跟数组不一样,这里切片的结果还是矩阵
print numpy.matlib.identity(3,dtype=int) #单位阵

猜你喜欢

转载自blog.csdn.net/cigo_2018/article/details/80911512