NumPy提供了一种新的数据类型:多维数组。数组只能够存储相同的数据类型(如字符型,数值型)。


 

 1、使用import关键词导入NumPy模块

import NumPy as np  #导入NumPy模块,并缩写为np

2、创建数据类型:数组(一维)

  • array()
print(np.array([1,3,4,5,8]))

[1 3 4 5 8]

  • arange()
print(np.arange(12)) #创建长为12的随机数组

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

print(np.arange(0,10,0.5)) #起始值,终止值,步长

[0.  0.5 1.  1.5 2.  2.5 3.  3.5 4.  4.5 5.  5.5 6.  6.5 7.  7.5 8.  8.5  9.  9.5]

  •  linspace()
print(np.linspace(0,5,3)) #起始值,终止值,生成的数组中的数的个数

[0.  2.5 5. ]

3、生成多维的数组矩阵

  • 直接定义多维数据矩阵
a = np.array([[1, 2, 3],[4, 5, 6],[1,2,4]])
print(a)

[[1 2 3]
 [4 5 6]
 [1 2 4]]

print(a.shape,a.dtype,a.size,a.ndim)

#a.shape 数组矩阵几行几列
#a.dtype 数组中的值的类型(前面有提到数组中每一个值的数据类型都要相同,和集合等数据类型不同)
#a.size  数组中一共有多少个值
#a.ndim  数组是几维

((3L, 3L), dtype('int32'), 9, 2)

  •  定义一维矩阵后,通过reshape()改变维度
b=np.arange(12,24,2)
print(b)
print(b.shape)

c=b.reshape(2,3) #reshape()的变化要重新赋值给一个新的变量
print(c)
print(c.shape)

[12 14 16 18 20 22]
(6L,)

[[12 14 16]
 [18 20 22]]
(2L, 3L)

 注意:操作变动之后,要重新赋值给一个新的变量。

 注意:(6L,),(1L,6L)的区别,前者代表这个数组是一个一维的,而后者代表这个数据是一个二维的,有1行6列。

4、已知维度的数组矩阵,填充数组

  • 使用完全相同的数字填充数组
zero = np.zeros((3,2)) #用0填充,此处的细节要注意,两个括号
print(zero)
one = np.ones((2,3)) #用1填充
print(one)

 [[0. 0.]
 [0. 0.]
 [0. 0.]]

[[1. 1. 1.]
 [1. 1. 1.]]

  • 使用随机数填充数组
rag1 = np.random.rand(2,4) #0和1之间均匀分布的随机数
print(rag1)
rag2 = np.random.randn(2,4) #均值为0,标准差为1的标准(高斯)正态分布
print(rag2)

(我统计学的知识相对很薄弱)

[[0.80834787 0.22204169 0.94490411 0.606424  ]
 [0.80399474 0.22150397 0.35677681 0.58908173]]

[[ 0.67043275  0.44090229  0.93088135 -0.15631505]
 [-0.1101033   2.01060774 -0.26952055 -1.44650271]]

 5、数组切片(把数组比作一根火腿的话,只对火腿的部分感兴趣,要切出这一部分)

(1)一维数据的切片(没有什么新意的地方,类比于列表)

#定义示例数组
sen = np.array([1,2,3,5,7])

[1 2 3 5 7]

  • 两个冒号的情况
print(sen[1:3]) #切取第1,2数
print(sen[:4]) #切取第0,1,2,3数
print(sen[2:]) #切取第2至最后
print(sen[1:-2]) #切取第1至-3数

 [2 3]
[1 2 3 5]
[3 5 7]
[2 3]

  • 三个冒号的情况
print(sen[::2]) #间隔为2
print(sen[0:4:2]) #前两个数组规定截取区间,第三个数字规定截取间隔
print(sen[::-1]) #逆转

 [1 3 7]
[1 3]
[7 5 3 2 1]

(2)二维数组的切片

定义二维数组:

a = np.arange(12) #先定义一维的随机矩阵
a.shape=(4,3) #这里容易犯错,定义a.shape()的行和列,有4行3列
print(a) #打印矩阵

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

  •  提取特定位置的数([ 行][列])
print(a[0][1]) #两个方括号,规定行和列的索引

 1

  • 提取特定行或列(逗号的妙用,注意位置,用逗号区分行和列,冒号继续沿用一维时的作用,这里暂时不明白可以自行修改,看看弹出的结果)
print(a[1,:]) #引入逗号,注意逗号的位置,在后面
print(a[:,2]) #在前面

 [3 4 5]
[ 2  5  8 11]

  • 提取特定行/列的特定的切片(逗号和冒号的混搭)
print(a[1,0:2]) #第索引为1的行中的第0至1的数值

 [3 4]

print(a[1:3:2,])

 [[3 4 5]]

6、文件操作

(1)将数组保存到文件(savetxt()的使用)

np.savetxt("data.txt",a) #a为之前使用到的多维数组


python dll 数组 python调用数组_数据类型

在同一个文件夹下找到data.txt文档

 

(2)将文件读取进数组

b=np.loadtxt("data.txt") #从data.txt文档中读取数组
print(b)

 7、建立副本(copy())

为什么要建立副本?

问题的起源:将原始数组赋值到另一个变量。在对新的变量进行操作的时候会改变原始的数组。因此我们需要建立副本,不改变原始数据。

c=a #赋值操作
c[0][0]=2 #将c中的索引为[0][0]的数变为2
print(c) #打印c
print(a) #打印a

#c

[[ 21  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]

#a 可以看到a也因此改变了
[[ 1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]

为了避免这种事情的出现,我们要使用copy()函数,建立副本。在对副本进行操作的过程中,不会改变原始数据。

b = a.copy() #建立a的副本,也可以b = a[:2,].copy()
b[0][0] =2 #改变b中的数值
print(b) #打印矩阵b
print(a) #打印矩阵a

#b

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

#a,未改变
[[ 1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]

8、矩阵的乘法(dot())

a = np.arange(9,dtype=int)
a.shape=(3,3)
print(a)

d = np.dot(a,a)
print(d)

#原始定义的矩阵

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

#乘之后的结果(关于具体的细节,参看线性代数会更好)
[[ 15  18  21]
 [ 42  54  66]
 [ 69  90 111]]


以上是关于numpy模块中的部分函数的简单操作,那么在实际的使用过程中,要根据自己实际的项目要求,继续深化理解。

通过这样一个小小的实例的学习,我明白了在Python中一个具体的模块应该如何import,以及模块中的函数应该如何具体的应用于自己的实际需求。