Python-Numpy的用法

1.在矩阵中将等于的25的值替换为10

1.获取矩阵中的部分数据

martix[:,1]
第一个参数 “:” 表示所有行,
第二个参数 “1” 表示从0开始的第1列
martix[0:2,1:1]
第一个参数“0:2” 表示从第0行开始取2行
第二个参数 “1:1” 表示从第2列开始取1列

import numpy
from io import StringIO
martix=numpy.array([[13,25,34],
                   [15,25,90],
                   [34,34,78]])
row_bool=(martix[:,1]==25)    //将martix中所有行中从0开始的第1列通过判断是否等于25转换为bool类型 
print (row_bool)

print (martix[row_bool])  //输出从0开始的第1列等于25的所有行

print (martix[row_bool,1])

martix[row_bool,1]=10
print (martix)

结果:
[ True True False]

[[13 25 34]
[15 25 90]]

[25 25]

[[13 10 34]
[15 10 90]
[34 34 78]]

2.类型装换

vector=numpy.array(["1","8","3"])
print (vector.dtype)
print (vector)
vector=vector.astype(float)
print (vector.dtype)
print (vector)
vector=vector.astype(int)
print (vector.dtype)
print (vector)

结果:
<U1
[‘1’ ‘8’ ‘3’]
float64
[1. 8. 3.]
int32
[1 8 3]
**

2 矩阵的计算

**

A. 矩阵的行和列求和

martix=numpy.array([[13,25,34],
                   [15,25,90],
                   [34,34,78]])
print (martix.min())         //取最小值
print (martix.sum(axis=1))

结果:
13
[ 72 130 146]
参数axis=1 表示对行求和
参数axis=0 表示对列求和

**B.**矩阵的计算

a=numpy.array([10,20,30])
b=numpy.array([1,2,3])
print (a)
print (b)

c=b**2
print (c)

d=a-b
print (d)

e=a-2
print (e)

print (a<15)

结果:
[10 20 30]
[1 2 3]
[1 4 9]
[ 9 18 27]
[ 8 18 28]
[ True False False]
**
C.矩阵的乘法
1.对应位置相乘

a=numpy.array([[1,2],
               [0,1]])
b=numpy.array([[2,3],
               [1,1]])
print (a*b)

结果:
[[2 6]
[0 1]]
2.点乘

a=numpy.array([[1,2],
               [0,1]])
b=numpy.array([[2,3],
               [1,1]])
print (a.dot(b))         //等同于numpy.dot(a,b)

结果:
[[4 5]
[1 1]]
3. e的x次方、开方

a=numpy.array([0,1,2])
print (numpy.exp(a))
print (numpy.sqrt(a))

结果:
[1. 2.71828183 7.3890561 ]
[0. 1. 1.41421356]

D.矩阵的变换

a=10*numpy.random.random((3,4))
print (a)
b=numpy.floor(a)   //将矩阵内的每一位都向下取整  例如:2.6向下取整为2
print (b)
c=b.ravel()   //将矩阵变为一维的list
print (c)

print (c.reshape(6,2))        //将一维的list变为6行2列的矩阵
d=c.reshape(6,2)       //矩阵转置
print (d.T)

结果:
[[7.76136544 1.5464046 0.762788 5.13759457]
[9.42843014 2.33134154 2.54968268 4.08276584]
[8.08201756 8.12768947 1.960896 5.56038574]]
[[7. 1. 0. 5.]
[9. 2. 2. 4.]
[8. 8. 1. 5.]]
[7. 1. 0. 5. 9. 2. 2. 4. 8. 8. 1. 5.]
[[7. 1.]
[0. 5.]
[9. 2.]
[2. 4.]
[8. 8.]
[1. 5.]]
[[7. 0. 9. 2. 8. 1.]
[1. 5. 2. 4. 8. 5.]]

E.矩阵的拼接

a=numpy.array([[1,2],
               [0,1]])
b=numpy.array([[2,3],
               [4,1]])
print (numpy.hstack((a,b)))      //横着拼接
print (numpy.vstack((a,b)))      //纵着拼接

[[1 2 2 3]
[0 1 4 1]]

[[1 2]
[0 1]
[2 3]
[4 1]]
F.矩阵的切分

横着切分

a=numpy.floor(10*numpy.random.random((2,12)))
print (a)
b=numpy.hsplit(a,3)
print (b)

结果:
[[0. 9. 2. 8. 9. 0. 0. 9. 5. 4. 1. 8.]
[7. 1. 3. 7. 1. 2. 8. 2. 1. 9. 1. 9.]]
[array([[0., 9., 2., 8.],
[7., 1., 3., 7.]]),
array([[9., 0., 0., 9.],
[1., 2., 8., 2.]]),
array([[5., 4., 1., 8.],
[1., 9., 1., 9.]])]

纵着切分

a=numpy.floor(10*numpy.random.random((8,2)))
print (a)
b=numpy.vsplit(a,4)
print (b)

结果:
[[5. 4.]
[6. 9.]
[4. 4.]
[7. 2.]
[1. 7.]
[8. 9.]
[2. 0.]
[4. 9.]]
[array([[5., 4.],
[6., 9.]]),
array([[4., 4.],
[7., 2.]]),
array([[1., 7.],
[8., 9.]]),
array([[2., 0.],
[4., 9.]])]

在指定位置切分

a=numpy.floor(10*numpy.random.random((2,12)))
print (a)
b=numpy.hsplit(a,(2,5))
print (b)

结果:
[[0. 3. 3. 9. 5. 5. 4. 9. 4. 1. 7. 5.]
[4. 5. 9. 8. 7. 8. 1. 4. 1. 8. 8. 9.]]
[array([[0., 3.],
[4., 5.]]),
array([[3., 9., 5.],
[9., 8., 7.]]),
array([[5., 4., 9., 4., 1., 7., 5.],
[8., 1., 4., 1., 8., 8., 9.]])]

3 随机生成数

**
A.

numpy.random.random(6)

结果:
array([0.63530378, 0.55735365, 0.12749153, 0.14049083, 0.2542503 ,
0.27290347])

B.

numpy.arange(15)

结果:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])

C.

numpy.arange(2,30,3)

结果:
array([ 2, 5, 8, 11, 14, 17, 20, 23, 26, 29])

第一个参数“2”表示从2开始
第二个参数“30”表示生成的数到30结束
第三个参数“3”表示每隔3生成一个数,即步长为3.

D.
从0到100之间间距相等的取21个数

numpy.linspace(0,100,21)

结果:
array([ 0., 5., 10., 15., 20., 25., 30., 35., 40., 45., 50.,
55., 60., 65., 70., 75., 80., 85., 90., 95., 100.])

**

4 随机生成矩阵

A.

numpy.random.random((4,3))

结果:
array([[0.42999226, 0.52501492, 0.34976328],
[0.36960566, 0.54099707, 0.28269108],
[0.93894036, 0.62716337, 0.08274904],
[0.05870725, 0.24330925, 0.67477269]])

B.

a=numpy.arange(15)
print (a)
b=a.reshape(3,5)
print (b)
print (a.shape)
print (b.shape)
print (a.dtype)

结果:
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
(15,)
(3, 5)
int32
int32

C.

numpy.zeros((3,4))

结果:
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])

D.

numpy.ones((2,3,3),dtype=int)

结果:
array([[[1, 1, 1],
[1, 1, 1],
[1, 1, 1]],

[[1, 1, 1],
[1, 1, 1],
[1, 1, 1]]])

numpy.ones((2,3,3),dtype=int)
第一个参数“2” 表示生成2个矩阵
第二个参数“3”表示生成的矩阵是3行
第3个参数“3”表示生成的矩阵是3列

复制

指向同一个地址
a=b 赋值,a和b是完全相同,改变其中任意一个变量,另外一个变量也会跟着改变

a=numpy.arange(12)
print (a)
b=a
print (b is a)
print (id(a))
print (id(b))

结果:
[ 0 1 2 3 4 5 6 7 8 9 10 11]
True
25212272
25212272
不是指向同一个地址,共用一套值
b=a.view(),仅仅是容器里面的值相同,一起变化

a=numpy.arange(12)
print (a)
a.shape=3,4
b=a.view()
print (b is a)

a[1,0]=56789
print (a)

b.shape=2,6
print (b)
print (id(a))
print (id(b))

结果:
[ 0 1 2 3 4 5 6 7 8 9 10 11]
False

[[ 0 1 2 3]
[56789 5 6 7]
[ 8 9 10 11]]

[[ 0 1 2 3 56789 5]
[ 6 7 8 9 10 11]]
19961360
25241384

只传值

a=numpy.arange(12)
d=a.copy()

找出矩阵中最大的值

找出矩阵中每一列最大的值

data=numpy.sin(numpy.arange(20)).reshape(4,5)
print (data)
ind=data.argmax(axis=0)
print (ind)
data_max=data[ind,range(data.shape[1])]
print (data_max)

结果:
[[ 0. 0.84147098 0.90929743 0.14112001 -0.7568025 ]
[-0.95892427 -0.2794155 0.6569866 0.98935825 0.41211849]
[-0.54402111 -0.99999021 -0.53657292 0.42016704 0.99060736]
[ 0.65028784 -0.28790332 -0.96139749 -0.75098725 0.14987721]]
[3 0 0 1 2]
[0.65028784 0.84147098 0.90929743 0.98935825 0.99060736]

矩阵的扩展

a=numpy.arange(0,40,10)
print (a)
b=numpy.tile(a,(2,3))   //扩展为2行3列的矩阵
print (b)

结果:
[ 0 10 20 30]
[[ 0 10 20 30 0 10 20 30 0 10 20 30]
[ 0 10 20 30 0 10 20 30 0 10 20 30]]

矩阵的排序

按行排序

a=numpy.array([[4,7,5],[2,6,3]])
print (a)
b=numpy.sort(a,axis=1) // 行排序
print (b)

结果:
[[4 7 5]
[2 6 3]]
[[4 5 7]
[2 3 6]]

索引排序

a=numpy.array([4,7,6,3])
b=numpy.argsort(a)  //先找到索引
print (b)
print (a[b])   //将索引带入a中获取数据

结果:
[3 0 2 1]
[3 4 6 7]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值