numpy

目录
创建数组
numpy数组属性
numpy基础运算
numpy索引
numpy数组合并
numpy数组分割
numpy数组的复制

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
创建数组
1、numpy.ndarray
ndarray 对象是用于存放同类型元素的多维数组,每个元素在内存中都有相同存储大小的区域。

import numpy as np
a = np.array([[10,20,30],[40,50,60],[70,80,90]])
a
array([[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]])

#可以指定数据类型

a = np.array([6,12,3],dtype=np.int)
a.dtype
int32

a = np.array([6,12,3],dtype=np.float)
a.dtype
float64
1
2
3
4
5
6
7
8
9
10
11
12
13
2、numpy.empty
numpy.empty 方法用来创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组。
numpy.empty(shape, dtype = float, order = ‘C’)
order:有"C"和"F"两个选项,分别代表行优先和列优先,在计算机内存中的存储元素的顺序。

a = np.empty([3,4],dtype=int)
a
array([[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]])
1
2
3
4
3、numpy.zeros
创建指定大小的数组,数组元素以 0 来填充。
numpy.zeros(shape, dtype = float, order = ‘C’)
order:‘C’ 用于 C 的行数组,或者 ‘F’ 用于 FORTRAN 的列数组

a = np.zeros((3,4))
a
array([[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]])
1
2
3
4
4、numpy.ones
创建指定形状的数组,数组元素以 1 来填充。
numpy.ones(shape, dtype = None, order = ‘C’)

a = np.ones((3,4))
a
array([[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]])
1
2
3
4
5、numpy.arange
使用 arange 函数创建数值范围并返回 ndarray 对象。
numpy.arange(start, stop, step, dtype)

a = np.arange(10,20,2)
a
array([10, 12, 14, 16, 18])

a = np.arange(12).reshape((3,4))
a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
1
2
3
4
5
6
7
6、numpy.linspace
创建一个一维数组,数组是一个等差数列构成的。
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
num:要生成的等步长的样本数量,默认为50;
endpoint:该值为 true 时,数列中中包含stop值,反之不包含,默认是True;
retstep:如果为 True 时,生成的数组中会显示间距,反之不显示。

a = np.linspace(1,10,4)
a
array([ 1. 4. 7. 10.])

#可以通过reshape改变形状

a = np.linspace(1,10,4).reshape((2,2))
a
array([[ 1. 4.]
[ 7. 10.]])
1
2
3
4
5
6
7
8
7、numpy.random.random
创建指定形状的随机数组。

a = np.random.random((2,4))
a
array([[0.51560035 0.90616572 0.58319964 0.10042999]
[0.77632944 0.83235997 0.45486569 0.12400622]])
1
2
3
numpy数组属性
首先创建一个ndarray 对象

array = np.array([[1,2,3],[2,3,4]])
print(array)
[[1 2 3]
[2 3 4]]
1
2
3
查看维数

print(‘number of dim:’,array.ndim)
number of dim: 2
1
查看形状

print(‘shape:’,array.shape)
shape: (2, 3)
1
查看容量

print(‘size:’,array.size)
size: 6
1
numpy基础运算
首先创建两个随机数组

a = np.array([[10,20,30],[40,50,60],[70,80,90]])
b = np.arange(1,10,1).reshape((3,3))
print(a)
[[10 20 30]
[40 50 60]
[70 80 90]]

print(b)
[[1 2 3]
[4 5 6]
[7 8 9]]
1
2
3
4
5
6
7
8
9
加法

a + b
array([[11, 22, 33],
[44, 55, 66],
[77, 88, 99]])
1
2
3
减法

a - b
array([[ 9, 18, 27],
[36, 45, 54],
[63, 72, 81]])
1
2
3
对应元素相乘

a * b
array([[ 10, 40, 90],
[160, 250, 360],
[490, 640, 810]])
1
2
3
矩阵相乘

np.dot(a,b) #也可写为a.dot(b)
array([[ 300, 360, 420],
[ 660, 810, 960],
[1020, 1260, 1500]])
1
2
3
对应元素相除

a / b
array([[10., 10., 10.],
[10., 10., 10.],
[10., 10., 10.]])
1
2
3
各个元素的n次方

b ** 2
array([[ 1, 4, 9],
[16, 25, 36],
[49, 64, 81]], dtype=int32)
1
2
3
最大值

a.max() #也可写为np.max(a)
90

#可指定求行最大值或列最大值
np.max(a,axis=0) #每列最大值
array([70, 80, 90])
np.max(a,axis=1) #每行最大值
array([30, 60, 90])
1
2
3
4
5
6
7
最小值

a.min() #也可写为np.min(a)
10

#可指定求行最小值或列最小值
np.min(a,axis=0) #每列最小值
array([10, 20, 30])
np.min(a,axis=1) #每行最小值
array([10, 40, 70])
1
2
3
4
5
6
7
求和

a.sum() #也可写为np.sum(a)
450

#可指定求各行之和或各列之和
np.sum(a,axis=0) #每列之和
array([120, 150, 180])
np.sum(a,axis=1) #每行之和
array([ 60, 150, 240])
1
2
3
4
5
6
7
求均值

a.mean() #也可写为np.mean(a)
50.0

#可指定求各行均值或各列均值

np.mean(a,axis=0) #每列均值
array([40., 50., 60.])

np.mean(a,axis=1) #每行均值
array([20., 50., 80.])
1
2
3
4
5
6
7
求中值

np.median(a)
50.0

#可指定求各行中值或各列中值

np.median(a,axis=0) #每列中值
array([40., 50., 60.])

np.median(a,axis=1) #每行中值
array([20., 50., 80.])
1
2
3
4
5
6
7
元素累加

np.cumsum(a)
array([ 10, 30, 60, 100, 150, 210, 280, 360, 450], dtype=int32)
1
元素之差

np.diff(a)
array([[10, 10],
[10, 10],
[10, 10]])
1
2
3
矩阵转置

np.transpose(a) #也可写为a.T
array([[10, 40, 70],
[20, 50, 80],
[30, 60, 90]])
1
2
3
排序

np.sort(a)
array([[10, 20, 30],
[40, 50, 60],
[70, 80, 90]])
1
2
3
固定元素范围

np.clip(a,50,70) #小于50的元素变成50,大于70的元素变为70,位于中间的元素不变
array([[50, 50, 50],
[50, 50, 60],
[70, 70, 70]])
1
2
3
三角函数

np.sin(a)
array([[-0.54402111, 0.91294525, -0.98803162],
[ 0.74511316, -0.26237485, -0.30481062],
[ 0.77389068, -0.99388865, 0.89399666]])

np.cos(a)
array([[-0.83907153, 0.40808206, 0.15425145],
[-0.66693806, 0.96496603, -0.95241298],
[ 0.6333192 , -0.11038724, -0.44807362]])

np.tan(a)
array([[ 0.64836083, 2.23716094, -6.4053312 ],
[-1.11721493, -0.27190061, 0.32004039],
[ 1.22195992, 9.00365495, -1.99520041]])
1
2
3
4
5
6
7
8
9
10
11
查找最值索引

np.argmin(a)
0

np.argmax(a)
8
1
2
3
比较

a < 50
array([[ True, True, True],
[ True, False, False],
[False, False, False]])

a == 70
array([[False, False, False],
[False, False, False],
[ True, False, False]])
1
2
3
4
5
6
7
numpy索引

a
array([[10, 20, 30],
[40, 50, 60],
[70, 80, 90]])
1
2
3
找出某一行

a[2]
array([70, 80, 90])
1
找出某一列

a[:,1]
array([20, 50, 80])
1
找出某一元素

a[1][1]
50
1
找出某一范围内的元素

a[1,0:2]
array([40, 50])
1
遍历出每一行

for row in a:
print(row)

[10 20 30]
[40 50 60]
[70 80 90]
1
2
3
4
5
遍历出每一列

for column in a.T:
print(column)

[10 40 70]
[20 50 80]
[30 60 90]
1
2
3
4
5
遍历出每一个元素

for item in a.flat:
print(item,end=’ ')

10 20 30 40 50 60 70 80 90
1
2
3
numpy数组合并

A = np.array([[1,1],[1,1]])
B = np.array([[2,2],[2,2]])
print(A)
[[1 1]
[1 1]]

print(B)
[[2 2]
[2 2]]
1
2
3
4
5
6
7
np.vstack纵向合并

C = np.vstack((A,B))
print©
[[1 1]
[1 1]
[2 2]
[2 2]]

print(A.shape,B.shape,C.shape)
(2, 2) (2, 2) (4, 2)
1
2
3
4
5
6
7
np.hstack横向合并

D = np.hstack((A,B))
print(D)
[[1 1 2 2]
[1 1 2 2]]

print(A.shape,B.shape,D.shape)
(2, 2) (2, 2) (2, 4)
1
2
3
4
5
np.concatenate指定合并方式

E = np.concatenate((A,B),axis=0)
F = np.concatenate((A,B),axis=1)
print(E.shape,F.shape)
(4, 2) (2, 4)
1
2
3
numpy数组分割

A = np.arange(12).reshape((3,4))
print(A)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
1
2
3
4
np.vsplit纵向分割

np.vsplit(A,3)
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
1
np.hsplit横向分割

np.hsplit(A,2)
[array([[0, 1],
[4, 5],
[8, 9]]),
array([[ 2, 3],
[ 6, 7],
[10, 11]])]
1
2
3
4
5
6
np.split指定分割方式

np.split(A,3,axis=0)
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]

np.split(A,2,axis=1)
[array([[0, 1],
[4, 5],
[8, 9]]),
array([[ 2, 3],
[ 6, 7],
[10, 11]])]
1
2
3
4
5
6
7
8
9
注:以上三种方式只能进行对等分割,如果不能平均分割成指定的个数则会报错。
np.array_split可进行不对等分割,当不能均匀分割时,第一部分将得到更多的元素。

np.array_split(A,3,axis=1)
[array([[0, 1],
[4, 5],
[8, 9]]),
array([[ 2],
[ 6],
[10]]),
array([[ 3],
[ 7],
[11]])]
1
2
3
4
5
6
7
8
9
numpy数组的复制
1、赋值
将一个变量的值赋值给另一个变量,这两个变量本质上是一样的,共同指向同一个存储位置,改变一个变量,另一个也随之改变。

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

b
array([0, 1, 2, 3])

a[0] = 11
a
array([11, 1, 2, 3])

b
array([11, 1, 2, 3])

b is a
True
1
2
3
4
5
6
7
8
9
10
11
12
2、.copy()深度复制
通过copy函数,两个变量虽然值相同,但本质上是不同的变量,互不影响。

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

b
array([0, 1, 2, 3])

a == b
array([ True, True, True, True])

a is b
False

a[0] = 11
a
array([11, 1, 2, 3])

b
array([0, 1, 2, 3])
————————————————
版权声明:本文为CSDN博主「yfqh9588」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43635468/article/details/104775497

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值