Python的科学计算包Numpy

一、地址与指向

import numpy as np

a = np.arange(12)
b = a 
# a和b的地址值相同
c = a.view()
# a和c的地址值不同,但是指向相同
d = a.copy()
# a和d的地址值不同,指向也不同

二、赋值操作

data = np.sin(np.arange(20)).reshape(5,4)

代码结果为
[[ 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]]

ind = data.argmax(axis=0)
# axis=0 代表列
#argmax 每一(列)最大值的索引

代码结果为
[2 0 3 1]

data_max = data[ind, range(data.shape[1])]
#然后可通过这个操作,把每一列的最大值打印出来

代码结果为
[ 0.98935825 0.84147098 0.99060736 0.6569866 ]

A = np.arange(0,40,10)#0~40间,10为步长
print(A)
B = np.tile(A,(2,2))  # 扩展,行和列都变成原来的两倍
print(B)

代码结果为
[ 0 10 20 30]
[[ 0 10 20 30 0 10 20 30]
[ 0 10 20 30 0 10 20 30]]

aa = np.array([[4,3,5],[1,2,1]])
print(aa)

bb = np.sort(aa,axis=1)  #对aa的值,由大到小排序
# axis=1 按水平方向计算,axis = 0 按垂直方向计算
print(bb)

代码结果为
[[4 3 5]
[1 2 1]]
[[3 4 5]
[1 1 2]]

c = np.array([4,3,1,2])
d = np.argsort(c)
print(d)  #确定值由大到小,所对应的的索引
print(c)
print(c[d])

代码结果为
[2 3 1 0]
[4 3 1 2]
[1 2 3 4]

三、矩阵

B = np.arange(3)
print(B)
print(np.exp(B))   #e的几次幂
print(np.sqrt(B))   #开根号

代码结果为
[0 1 2]
[ 1. 2.71828183 7.3890561 ]
[ 0. 1. 1.41421356]

A = np.floor(10*np.random.random((3,4)))
print(A)
#  floor  是将 数进行一个向下的取整

代码结果为
[[ 7. 9. 3. 7.]
[ 7. 3. 4. 9.]
[ 9. 6. 6. 4.]]

print(A.ravel())   # 把矩阵拉成一个向量
A.shape = (6,2)   # 把一个向量变成 6行2列的矩阵
# 也可以写成 a.reshape(3,-1) 对于一个向量转换成矩阵,行数确定了,列数也就确定了,写成-1即可自动转换
a = np.floor(10*np.random.random((2,2)))
b = np.floor(10*np.random.random((2,2)))
print(np.hstack((a,b)))
# 把 a 和  b  左右拼接起来
print(np.vstack((a,b)))
# 把 a 和 b 上下拼接起来
aa = np.floor(10*np.random.random((2,12)))
print(aa)
print(np.hsplit(aa,3))   
#   按左右 平均分成3份 ,每个为2*4的矩阵
print(np.hsplit(aa,(3,4)))
# 往里传元组,指定切割的位置在3  4  列后面  ,切两刀,也是变成3份
bb = np.floor(10*np.random.random((12,2)))
print(bb)
print(np.vsplit(bb,3))
#  按上下, 平均切成3份  ,每个为4*2矩阵

代码结果为
[[ 4. 9. 1. 4. 5. 3. 9. 2. 1. 0. 3. 2.]
[ 1. 3. 5. 2. 8. 4. 6. 4. 2. 6. 9. 4.]]

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

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

[[ 7. 2.]
[ 7. 1.]
[ 0. 7.]
[ 6. 3.]
[ 0. 5.]
[ 8. 3.]
[ 9. 4.]
[ 9. 5.]
[ 5. 8.]
[ 6. 0.]
[ 7. 7.]
[ 5. 8.]]

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

print(np.arange(15))
a = np.arange(15).reshape(3,5)  # 把行向量分成3行5列的矩阵
print(a)
print(a.shape)  #a的行列是多少
print(a.ndim)  # 矩阵的维数是多少
print(np.zeros((3,4)))  # 定义一个矩阵,初始化值为0,传入的元组的形式
print(np.ones((3,4)))   # 定义一个矩阵,初始化值为1,传入的元组的形式

print(np.arange(10,30,5))  #起始的值为10,终值为30,每次加5,这样一个数组结构

print(np.random.random((2,3)))   #2行3列的随机值组成的矩阵, 0~1
print(np.linspace(0,2*pi,100))  # 从0到2*π,等间距的取100个值

矩阵的加减法

a = np.array([20,30,40,50])
b = np.arange(4)
c = a - b
print(c)
c = c - 1
print(c)
b = b**2
print(b)
print(a<35)  #结果是一个true/false组成的矩阵

矩阵的乘法与点乘

print(A*B)    #A,B对应位置相乘
print(A.dot(B))   # 矩阵乘法
print(np.dot(A,B))  #矩阵乘法
vector = numpy.array([5,10,15,20])
print(vector[0:3])  #取一行
print(vector == 10)  #判断矩阵中那个值为10。返回boolean
matrix = numpy.array([
                    [5,10,15],
                    [20,25,30],
                    [35,40,45]
                    ])
print(matrix[:,1])  #代表取第二列
print(matrix[:,0:2])  #取两列
print(matrix[0:2])   # 取两行
print(matrix[1:3,0:2])  #取第1~2行,第0~1列
print(matrix == 25)

四、与或

vector = numpy.array([5,10,15,20])
equal_to_ten_and_five = (vector == 10) & (vector == 5)
print(equal_to_ten_and_five)
#  & 与:当前array里一个数 既等于10又等于5

equal_to_ten_or_five = (vector == 10) | (vector == 5)
print(equal_to_ten_or_five)
#  | 或:当前array里一个数 等于10或者等于5
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值