跳到主要内容

Numpy的使用

1.创建数组

函数功能
array(x)根据列表或元组x创建数组(数组可能是多维的)
arange(x, y, i)创建一维数组,元素等价于range(x, y, i)
linspace(x, y, n)创建一个由区间[x, y]的n-1等分点构成的一维数组,包含x和y
random.randint(x,y,n)创建一个一维数组,包含n个范围在[x, y]之间的随机整数
random.rand(*dn)dn代表dimension,调用的时候不需要传入tuple,只需要传入每一个维度的长度,维数之间用逗号分隔。eg. rand(2, 3, 4),返回来一个三维数组,长度分别是2,3,4
random.random_sample(shape)创建一个形状为shape,元素为[0, 1.0)之间的数,若参数是一个单独的数,则创建一个n个数的一维数组
zeros(shape)同上,只不过元素为0.0
ones(shape)同上,只不过元素为1.0
代码展示

import numpy as np

l = [1, 2,4, 5]
martix = [
[2, 3,4, 5],
[4, 5, 6, 7]
]
narray = np.array(l)
npmartix = np.array(martix)
print(narray) # [1 2 4 5]
print(npmartix)
# [[2 3 4 5]
# [4 5 6 7]]

nprange = np.arange(10, 21, 2)
print(nprange)
# [10 12 14 16 18 20]

line = np.linspace(0, 10, 6)
print(line)
# [ 0. 2. 4. 6. 8. 10.]

rand = np.random.randint(10, 20, 10)
print(rand)
# [19 18 12 19 14 13 18 11 13 10]

zeros = np.zeros((2, 3))
print(zeros)
# [[0. 0. 0.]
# [0. 0. 0.]]

ones = np.ones((2, 3))
print(ones)
# [[1. 1. 1.]
# [1. 1. 1.]]

print(np.random.random_sample((2, 3)))
# [[0.40496204 0.68582804 0.23432677]
# [0.44138117 0.85704346 0.24691917]]

print(np.random.rand(2,2,2))
# [[[0.14219542 0.40372185]
# [0.85191046 0.91525198]]

# [[0.93477104 0.74098469]
# [0.19136794 0.40864522]]]

2.numpy数组常用属性和方法

属性含义
dtype数组元素的类型
ndim数组的维度
shape数组的形状,即每一维的长度
size数组元素个数
代码展示

import numpy as np

array = np.array([1,2,3,4,5,6])
print(array) # [1 2 3 4 5 6]
print(array.dtype) # int32
print(array.ndim) # 1
print(array.size) # 6
print(array.shape) # (6,)

newarray = array.reshape((2,3))
print(array) # [1 2 3 4 5 6],说明reshape并不会改变原先的数组
print(newarray)
# [[1 2 3]
# [4 5 6]]
print(newarray.shape) # (2, 3)
print(newarray.ndim) # 2

方法功能
reshape改变数组的形状
flatten转换为一维数组
argwhere查找元素
tolist转换为list
min求最小元素
max求最大元素
sum求和
mean求均值
代码展示

import numpy as np

newarray = np.array(
[[1, 2 ,3],
[4, 5, 6]]
)

# reshape((-1, 2)) 中的 -1 意味着系统自己计算有多少行
print(newArray.reshape((-1, 2)))
# [[1 2]
# [3 4]
# [5 6]]

pos = np.argwhere(newarray == 3)
print(pos)
# [[0 2]]

lst = newarray.tolist()
print(lst)
# [[1, 2, 3], [4, 5, 6]]

print(newarray.min()) # 1
print(newarray.max()) # 6

flat = newarray.flatten()
print(flat)
# [1, 2, 3, 4, 5, 6]

print(newArray.mean()) # 3.5

print(newArray.sum()) # 21

3. numpy添加元素

函数功能
append(x, y)若y是数组,列表或者元组,就将y的元素添加进数组x
concatenate((...), axis)拼接多个数组或列表

numpy数组一旦生成,元素就不能增加或者删除,上面的函数都是返回新的数组

代码展示

import numpy as np

newarray = np.array(
[[1,2,3,4],
[2,3,4,5],
[3,4, 5,6]]
)
addarray = np.random.randint(10,100,4)
print(np.append(newarray, addarray))
# [ 1 2 3 4 2 3 4 5 3 4 5 6 71 92 95 83]
print(np.append(newarray,10.0))
# [ 1. 2. 3. 4. 2. 3. 4. 5. 3. 4. 5. 6. 10.]
addarray1= np.array(
[[1,2],
[2,3],
[2,3]]
)

print(np.concatenate((newarray,newarray, addarray1),axis=1))
# [[1 2 3 4 1 2 3 4 1 2]
# [2 3 4 5 2 3 4 5 2 3]
# [3 4 5 6 3 4 5 6 2 3]]

4. numpy删除数据元素

函数功能
delete删除元素得到新数组,注意只能删除其中的一个元素,一维数组可以删除其中的一个数,而二维数组只能删除其中的行或者列
import numpy as np

newarray = np.array(
[[1,2,3,4],
[2,3,4,5],
[3,4, 5,6]]
)

print(np.delete(newarray,[0,1], axis=1)) # 删除第一列和第二列
# [[3 4]
# [4 5]
# [5 6]]

5. numpy查找元素

方法功能
argwhere查找元素所在位置,位置以ndarray类型返回
in判断某个元素是否在数组里面
array[condition]根据condition来抽取array中符合condition的元素组成一个一维数组
代码展示

import numpy as np

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

# argwhere查找, 返回一个ndarray,包含了查找到的位置
pos = np.argwhere(array==3)
print(pos)
# [[0 2]
# [1 1]
# [2 0]]
print(type(pos))
# <class 'numpy.ndarray'>

# in操作
print(2 in array) # True
print(10 in array) # False

# 抽取其中的某些元素组成一维数组,注意这是切片操作,实际上得到的是array的视图
b = array[array > 1]
print(b)
# [2 3 4 2 3 4 5 3 4 5 6]

6. numpy中修改元素

可以直接根据下标来修改元素

import numpy as np

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

array[0][1] = 10
print(array)

7. numpy中的数学运算

数组的运算有三种情况

  1. 数组和单个数进行运算,则数组中每个元素都与这个数进行相同的运算
  2. 数组和形状相同的数组进行运算,对应元素进行运算
  3. 数组和形状不同的数组进行运算,会自动用广播规则
代码展示

import numpy as np

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

# 和单个数进行运算
print(array + 10)
print(array - 10)
print(array * 10)
print(array / 10)

# 和形状相同的数组进行运算
print(array + array)
print(array * array)
print(array - array)
print(array / array)

# 运用了广播规则
ten = np.array([10, 10, 10, 10])
print(np.add(array, ten))
# [[11 12 13 14]
# [12 13 14 15]
# [13 14 15 16]]

8. numpy数组切片

语法:

  • array是一维数组, array[1: 3], 左闭右开区间
  • array是一维数组, array[1:7:2],左闭右开,每隔两个元素取一个
  • array是二维数组, array[1:3, 1:3], 左闭右开区间
代码展示

import numpy as np

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

b = array[0:2, 0:2]
print(b)
# [[1 2]
# [2 3]]

# 没有说明列范围时,默认切割所有列
c = array[1: 3]
print(c)
# [[2 3 4 5]
# [3 4 5 6]]

# 切片只是视图
b[0][0] = 100
print(b)
# [[100 2]
# [ 2 3]]
print(array)
# [[100 2 3 4]
# [ 2 3 4 5]
# [ 3 4 5 6]]

注意: numpy中数组切片就是视图

9. numpy输出控制

import numpy as np

# 设置浮点数精度,precision
np.set_printoption(precision=2)