NumPy基础学习笔记

NumPy基础学习笔记

简介

NumPy是主要面向数值计算的Python语言的扩展程序库。

NumPy数据类型

NumPy数据类型比Python更加丰富,并且他是基于矩阵进行的,首先使用numpy.array对输入的数据进行转化。

import numpy as np
a = np.array([[9,2,3],
             [2,3,4]])
print(a)
print('number of dim:',a.ndim) #输出数组维度
print('shape:',a.shape) #输出行数多少,列数多少
print('size:',a.size) #输出总共的元素是多少

得到输出结果是没有逗号分隔的列表,这也是array的概念:

[[9 2 3]
[2 3 4]]
number of dim: 2
shape: (2, 3)
size: 6

我们也可以使用一定的代码指定数值类型和数组参数。比如:dtype指定数组,astype转换数组类型。

import numpy as np
a=np.array([2,28,25],dtype=np.int32)
print(a,a.dtype) #查看a及type类型

输出结果为:

[ 2 28 25] int32

NumPy数组类型

NumPy最核心且重要的一个特性是ndarray多维数组对象,用有对高维数组的处理能力,是数值计算中很重要的特性。ndarrray具有六个参数,分别是:

  • shape

  • dtype

  • buffer

  • offset

  • strides

  • order

NumPy基本运算

矩阵array的加减法:

import numpy as np
a=np.array([10,20,30,40])
b=np.arange(4)
print(a,b)
c=a-b
print(c)

输出结果为:

[10 20 30 40] [0 1 2 3]
[10 19 28 37]

乘法中平方要用两个**乘号,三角函数等需要额外调用函数表示:

import numpy as np
a=np.array([10,20,30,40])
b=np.arange(4)
print(a,b)
c=10*np.sin(a)
print(c)

输出结果为:

[10 20 30 40] [0 1 2 3]
[-5.44021111 9.12945251 -9.88031624 7.4511316 ]

简单的判断输出:

加上print(c>0)之类的即可,输出为False或者True

运行矩阵的乘法:

import numpy as np
a=np.array([[1,1],
           [0,1]])
b=np.arange(4).reshape((2,2)) #定义
c=a*b
c_dot=np.dot(a,b) #另一个形式是a.dot(b),也是矩阵a和b相乘
print(a)
print(c_dot)

结果为:

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

生成随机矩阵,然后输出最大最小值等:还可以定义在固定的行和列中求和,如在第一行中求和等numpy.sum(a,axis=1)

import numpy as np
a=np.random.random((2,4))
print(a)
print(np.sum(a))
print(np.max(a))
print(np.min(a))

输出结果为:

[[0.59158093 0.90361177 0.897047 0.61164592]
[0.52997834 0.83121234 0.64046197 0.39272447]]
5.398262738075469
0.9036117685336776
0.39272447025501467

NumPy的索引

矩阵最大值最小值的索引:

import numpy as np
A=np.arange(14,2,-1).reshape((3,4))
print(A)
print(np.mean(A))#平均值
print(np.mean(A,aixs=1))#对于行计算平均数
print(np.argmin(A))#最小值
print(np.argmax(A))#最大值
print(np.median(A))#中位数
print(np.cumsum(A))#累加
print(np.diff(A))#累差
print(np.nonzero(A))#非零数
print(np.sort(A))#逐行排序
print((A.T).dot(A))#转置
print(np.clip(A,5,9))#截断,不能显示小于5或者大于9的

索引并输出具体位置的元素:

import numpy as np
A=np.arange(3,15).reshape((3,4))
print(A)
print(A[1][1])#索引第一行第一列,注意行和列数都从0开始计数
print(A[1,1])#另一种表达形式
print(A[2,:])#索引第二行的所有数
print(A[:,2])#索引第二列的所有数
print(A[2,1:3])#索引第二行第一列到第三列,包含第一列,不包含第三列
import numpy as np
A=np.arange(3,15).reshape((3,4))
print(A)
for row in A:
    print(row)#输出行
for column in A.T:#转置A
    print(column)#输出行,就是原本的列
print(A.flatten())
for item in A.flat:#迭代每一个项目使用flat,形成一个迭代器,把三行四列的矩阵迭代成一个一个的项
    print(item)

NumPy的array合并

vstack上下合并,hstack左右合并,另外横向转为纵向合并需要多一些步骤。

import numpy as np
A=np.array([1,1,1])
B=np.array([2,2,2])
C=np.vstack((A,B))#vstack上下合并,变成一个数列
print(C)
D=np.hstack((A,B))#hstack左右合并,变成一个数列
print(D)
print(A.shape,C.shape,D.shape)

输出结果为:

[[1 1 1]
[2 2 2]]
[1 1 1 2 2 2]
(3,) (2, 3) (6,)

NumPy的array分割

注意:在分割的时候只使用split不能进行不等量的分割,但可以使用numpy.array_split

import numpy as np
A=np.arange(12).reshape((3,4))
print(A)
print(np.split(A,2,axis=1))#2代表两块,axis代表对列进行操作
print(np.array_split(A,3,axis=1))

输出结果:

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

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

另外,有一个更为简化的函数

import numpy as np
A=np.arange(12).reshape((3,4))
print(np.vsplit(A,3))#纵向分割为3块
print(np.hsplit(A,2))#横向分割为2块

输出结果为:

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

NumPy的赋值和deep copy

赋值例如:

import numpy as np
a=np.arange(4)
b=a
c=a
print(b)
a[1:3]=[22,33]
print(c)

输出结果为:

[0 1 2 3]
[ 0 22 33 3]

如果想要b对于a赋值之后的值,但是不想关联a,可以使用deep copy的功能。

import numpy as np
a=np.arange(4)
a[1:3]=[22,33]
b=a.copy()#deep copy
print(b)
a[3]=44
print(b)

输出结果为:

[ 0 22 33 3]
[ 0 22 33 3]

尾声

numpy先学这么多吧,虽然我慢吞吞,但是加油加油加油。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值