numpy
2018-11-30 本文已影响0人
taijielan
numpy.array()中的数据格式必须一致
numpy从txt中读取数据到矩阵中
numpy.genfromtxt(filename, delimiter = ',',dtype = str)
numpy.array()
将列表改为矩阵
import numpy as np,os,sys
#设置一维举证
p = np.array([1,2,3,4])
#设置二维矩阵
p1= np.array([[1,2,3,4],[2,3,5,6],[7,8,9,0]])
print(p)
print(p1)
#获取矩阵信息
print(p.shape)
print(p1.shape)
print(help(np.shape))
获取array中的数据类型
import numpy
p = numpy.array([1,2,3,4])
print(p)
print(p.dtype) #int64
array中使用切片取值
import numpy
p = numpy.array([10,2,3,4,5])
print(p[0:2])
多维数组中的值
import numpy
p = numpy.array(
[
[1,2,3,4],
[5,6,7,8],
[1,2,3,5]
]
)
#取第1列
print(p[:,1]) # ":" 代表所有的 值是[2 6 2]
#取第一行
print(p[1,:]) #[5 6 7 8]
#取第2行第三列
print(p[2,3]) #5
#取1-2列
print(p[:,0:2]) #[[1 2][5 6] [1 2]]
根据索引获取矩阵
import numpy
#判断1维矩阵中是否存在相同的
p = numpy.array([1,2,3,4,5,7,10,11])
s = (p == 10)
print(s) #[False False False False False False True False]
#拿到等于10的值
print(p[s]) #[10]
p1 =numpy.array([
[1,2,3,4,5],
[2,3,4,5,7],
[3,4,5,5,6]
])
#获取第5列等于7的索引
s1 = (p1[:,4] == 7)
#拿到第5列中的返回
print(s1) #[False True False
#拿到等于7的那一行
print(p1[s1, :]) #[[2 3 4 5 7]]
numpy中的条件表达式
import numpy
#判断是否同时满足条件
a1 = numpy.array([5,10,15,20])
equal_five_and_ten = (a1 == 5)&(a1 == 10)
print(equal_five_and_ten) #[False False False False]
#判断是否仅满足条件之一
equal_five_or_ten = (a1 ==5) |(a1 == 10)
print(equal_five_or_ten)#[ True True False False]
#将满足条件的索引的值改为50
a1[equal_five_or_ten] = 50
print(a1)#[50 50 15 20]
转换array()中数据的类型
import numpy
vector = numpy.array(["1","2","3"])
print(vector.dtype) #<U1
print(vector) #['1' '2' '3']
#转换数据类型
vector= vector.astype(float)
print(vector.dtype) #float64
print(vector) # [1. 2. 3.]
矩阵的运算
import numpy
vector = numpy.array([1,2,3,4,5,12,-1])
#矩阵中的和
print(vector.sum()) #15
#最大值
print(vector.min()) #-1
#最小值
print(vector.max()) #12
numpy中的计算
import numpy
vector = numpy.array([1,2,3,4,5,12,-1])
#矩阵中的和
print(vector.sum()) #15
#最大值
print(vector.min()) #-1
#最小值
print(vector.max()) #12
vector = numpy.array(
[
[1,2,3,4],
[1,2,3,5],
[1,2,3,6]
]
)
#表示行相加
print(vector.sum(axis=1))
#表示列相加
print(vector.sum(axis=0))
将向量改为矩阵
import numpy
#设置一个长度维15的向量
print(numpy.arange(15))
#将长度15的标亮改为3行5列的矩阵
vector = numpy.arange(15).reshape(3,5)
print(vector)
print(vector.shape)
通过numpy构造向量
import numpy
#设置3行4列的为0 的矩阵
b = numpy.zeros((3,4))
vector = numpy.ones((4,5))
print(vector) #[[1. 1. 1. 1. 1.][1. 1. 1. 1. 1.][1. 1. 1. 1. 1.][1. 1. 1. 1. 1.]]
print(b) #[[0. 0. 0. 0.][0. 0. 0. 0.][0. 0. 0. 0.]]
#设置向量从10-30 每次加5
vector1 = numpy.arange(10,30,5)
print(vector1)#[10 15 20 25]
numpy的基本计算
import numpy as np
#随机一个2行3列的从-1到1的举证
a = np.random.random((2,3))
print(a) #[[0.65507723 0.46095135 0.45749613][0.71049155 0.71738481 0.53144442]]
from numpy import pi
#引入1到2pi之间的100个平均数
p =np.linspace(1,2*pi,100)
print(p)
a1 = np.array([10,20,30,40])
a2 = np.arange(4)
a3 = a1-a2
a4 = a1+a2
a5= a**2
print(a1) #[10 20 30 40]
print(a2)#[0 1 2 3]
print(a3)#[10 19 28 37]
print(a4)#[10 21 32 43]
print(a5)#[[6.07811319e-02 7.68443365e-01 4.55558396e-02][1.21376769e-01 4.28695920e-04 9.60006899e-01]]
print(a1<30)#[ True True False False]
b1 = np.array([[1,1],[0,1]])
b2 =np.array([[2,0],[3,4]])
b3 = b1*b2
b4 = b1.dot(b2)
b5 = np.dot(b1,b2)
print(b1) #[[1 1][0 1]]
print(b2)#[[2 0][3 4]]
print(b3)#[[2 0][0 4]]
print(b4)#[[5 4][3 4]]
print(b5)#[[5 4] [3 4]]
c1 = np.arange(3)
print(c1)#[0 1 2]
#指数函数也就是多少次方
print(np.exp(c1)) #[1. 2.71828183 7.3890561 ]
#求平分根
print(np.sqrt(c1))#[0. 1. 1.41421356]
d1 = np.floor(10*np.random.random((3,4)))
#创建3行4列的矩阵
print(d1) #[[8. 0. 1. 9.][4. 5. 7. 1.][8. 5. 7. 2.]]
print(d1.ravel())
d1.shape =(6,2)
print("============》")
#创建6行2列的数据
print(d1)#[[3. 4.][9. 0.][5. 8.][2. 7.][7. 9.][2. 1.]]
#转制
print(d1.T)#[[3. 9. 5. 2. 7. 2.][4. 0. 8. 7. 9. 1.]]
print("e===========")
e1 = np.floor(10*np.random.random((2,2)))
e2 = np.floor(10*np.random.random((2,2)))
print(e1)#[[0. 6.][9. 0.]]
print(e2)#[[6. 0.] [9. 5.]]
#矩阵横着拼接
print(np.hstack((e1,e2)))#[[0. 6. 6. 0.][9. 0. 9. 5.]]
#矩阵竖着拼接
print(np.vstack((e1,e2)))#[[0. 6.][9. 0.][6. 0.] [9. 5.]]
print("f===========")
f1 = np.floor(10* np.random.random((2,12)))
print(f1)#[[3. 3. 6. 2. 7. 6. 6. 9. 6. 2. 3. 9.] [4. 7. 8. 4. 4. 4. 1. 1. 8. 6. 2. 9.]]
#横着平均分为3份,
print(np.hsplit(f1,3))#[array([[3., 3., 6., 2.],[4., 7., 8., 4.]]), array([[7., 6., 6., 9.],[4., 4., 1., 1.]]), array([[6., 2., 3., 9.],[8., 6., 2., 9.]])]
#在第3个元素后分割,后面的为另一个元素,最后的为剩下的元素
print(np.hsplit(f1,(3,4)))#[array([[5., 8., 5.], [8., 5., 0.]]), array([[6.], [5.]]), array([[8., 7., 2., 0., 7., 7., 8., 9.], [2., 3., 6., 9., 7., 6., 9., 0.]])]
f2 = np.floor(10*np.random.random((12,2)))
print(f2)#[[8. 7.][4. 8.][2. 8.] [2. 4.][7. 2.][4. 2.][9. 0.][7. 4.] [1. 1.] [5. 5.][9. 4.][1. 6.]]
#竖着分为3份
print(np.vsplit(f2,3))#[array([[8., 7.], [4., 8.], [2., 8.], [2., 4.]]), array([[7., 2.], [4., 2.], [9., 0.], [7., 4.]]), array([[1., 1.], [5., 5.], [9., 4.], [1., 6.]])]
f3 = np.arange(12)
#深度赋值
f4 = f3
print (f4 is f3)#True
print((id(f3)))#4571387904
print((id(f4)))#4571387904
#潜度复制
f5 = f3.view()
print(f5 is f3)#False
f5.shape =(3,4)
f5[0,0] = 123
print(f5)##[[123 1 2 3][ 4 5 6 7][ 8 9 10 11]]
#copy
f6 = f3.copy()
print(f6 is f3)#False
f6.shape = (3,4)
f6[0,0] = 111
print(f6)#[[111 1 2 3][ 4 5 6 7][ 8 9 10 11]]
print(id(f6))#4571388064
print(id(f3))#4571387904
f7 = np.sin(np.arange(12)).reshape(3,4)
print(f7)#[[ 0. 0.84147098 0.90929743 0.14112001][-0.7568025 -0.95892427 -0.2794155 0.6569866 ] [ 0.98935825 0.41211849 -0.54402111 -0.99999021]]
#在一列上的最大值的索引
f8 = f7.argmax(axis = 0)
print(f8)#[2 0 0 1]
#在一行上最大值的索引
f9 = f7.argmax(axis =1)
print(f9)#[2 3 0]
#拿到最大值 f8是行值 ,range(f7.shape[1]))是列值
f10 = f7[f8,range(f7.shape[1])]
print(f10)#[0.98935825 0.84147098 0.90929743 0.6569866 ]
f11 = np.arange(0,40,10)
print(f11)#[ 0 10 20 30]
#对数据进行扩展 扩展为2行1列
print(np.tile(f11,(2,1)))#[[ 0 10 20 30][ 0 10 20 30]]
f12 =np.array([[3,2,5],[2,4,1]])
#表示对行进行排序
f13 = np.sort(f12,axis=1)
print(f13)# [[2 3 5][1 2 4]]
f14 = np.array([5,4,3,6])
f15 = np.argsort(f14)
#求排序的索引
print(f15)#[2 1 0 3]
#排序
print(f14[f15])#[3 4 5 6]