Numpy基础学习笔记2020.12.28

重在数值计算

数组和列表的区别:

1、列表可以存不同类型的数据;数组必须存同一类型的数据
2、优先级:字符串 > 浮点型 > 整型

创建numpy数组的三种方法:

1、各种已封装好的基础矩阵
zeros()、ones()、linespace()、arange()、random()

import numpy as np
np.zeros((3,4))
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])
np.ones(shape=(3,4))
array([[1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.]])
np.linspace(0,100,num=20) # 一维等差数列 闭区间
array([  0.        ,   5.26315789,  10.52631579,  15.78947368,
        21.05263158,  26.31578947,  31.57894737,  36.84210526,
        42.10526316,  47.36842105,  52.63157895,  57.89473684,
        63.15789474,  68.42105263,  73.68421053,  78.94736842,
        84.21052632,  89.47368421,  94.73684211, 100.        ])
np.arange(0,50,step=2) # 一维等差数列 左开右闭
array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32,
       34, 36, 38, 40, 42, 44, 46, 48])
np.random.randint(0,100,size=(3,4))
array([[ 1, 86, 89, 90],
       [54,  9, 92, 52],
       [49, 59, 55, 14]])
# -1到1之间的随机数
np.random.random((3,4))

2、将外部的一张图片的数据读取加载到numpy数组中

import matplotlib.pyplot as plt
img_arr = plt.imread('./1.jpg') # 返回的是数组,数组中装载的是图片内容[行,列,颜色]
plt.imshow(img_arr) # 将numpy数组进行可视化展示

3、使用array()创建一个数组

import numpy as np
arr = np.array([[1,2,3],
                [4,5,6],
                [7,8,9]])
arr
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

数组的一些属性

arr.dtype # 返回的是数组里元素的类型
dtype('int32')
type(arr) # 返回的是数组的类型
numpy.ndarray

切片

# 切出arr数组的前两行数据
arr[0:2] # arr[行切片]
array([[1, 2, 3],
       [4, 5, 6]])
# 切出arr数组的前两列数据
arr[:,0:2] # arr[行切片,列切片]
array([[1, 2],
       [4, 5],
       [7, 8]])

倒置

# 行倒置
arr[::-1] 
array([[7, 8, 9],
       [4, 5, 6],
       [1, 2, 3]])
# 列倒置
arr[:,::-1]
array([[3, 2, 1],
       [6, 5, 4],
       [9, 8, 7]])
# 行、列都倒置(所有元素都倒置)
arr[::-1,::-1]
array([[9, 8, 7],
       [6, 5, 4],
       [3, 2, 1]])

数组倒置应用在由图片数据构成的数组中时,行倒置=图片上下翻转,列倒置=图片左右翻转

变形reshape

# 二维变一维
arr_1 = arr.reshape((9,)) # 原本是3x3的数组,变成一维后,元素必须还是9,不能多也不能少
arr_1
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
# 把矩阵拉成一个向量
arr.ravel()
# 一维变二维
arr_2 = arr_1.reshape((3,3))
arr_2
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
arr_1.reshape((3,-1)) # 这个“-1”意思是有了元素总数,让python自己算第二个维度的长度

级联操作concatenate()

- 将多个numpy数组进行横向或纵向的拼接
- axis轴向的理解
    0:列  纵向拼接(默认)
    1:行  横向拼接
np.concatenate((arr,arr))
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9],
       [1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
# 竖着拼
np.vstack((arr,arr))
np.concatenate((arr,arr),axis=1)
array([[1, 2, 3, 1, 2, 3],
       [4, 5, 6, 4, 5, 6],
       [7, 8, 9, 7, 8, 9]])
# 横着拼
np.hstack((arr,arr))

常见的聚合操作

sum, max, min, mean
arr.sum() 
45
arr.sum(axis=0) # 各列的和
array([12, 15, 18])
arr.sum(axis=1) # 各行的和
array([ 6, 15, 24])
arr.max()
9

常用的数学函数

- sin() cos() tan()
- numpy.around(a,decimals)函数返回a的四舍五入值
    - a:数组
    - decimals:舍入的小数位数。默认为0。如果是负数,整数将四舍五入到小数点左侧的位置
np.sin(2.5)
0.5984721441039564
np.around(3.84,1)
3.8
np.around(3.84,-1)
0.0
np.around(3.84)
4.0

常用的统计函数

- 标准差std()
- 方差var()
arr[1]
array([4, 5, 6])
arr[1].std()
0.816496580927726
arr[1].var()
0.6666666666666666

读数据

import numpy as np

np.genfromtxt("文件路径和文件名",delimiter="分隔符",dtype=str)

查看帮助文档

print(help(函数))

强制转换类型

numpy.array.astype(类型)

矩阵常用操作

A = np.array([[1,1],
              [0,1]])
B = np.array([[2,0],
              [3,4]])
# 对应位置的元素相乘 *
A*B
array([[2, 0],
       [0, 4]])
# 矩阵乘法 dot 以下两种方法一样
A.dot(B)
np.dot(A,B)
array([[5, 4],
       [3, 4]])
# e的多少次幂
np.exp(A)
array([[2.71828183, 2.71828183],
       [1.        , 2.71828183]])
# 开根号
np.sqrt(A)
array([[1., 1.],
       [0., 1.]])
# 向下取整
np.floor(A)
array([[1., 1.],
       [0., 1.]])
# 切矩阵
np.hsplit(a,3) #切成横着的3个平均的部分
np.hsplit(a,(3,4)) # 指定刀位 Split a after the third and the fourth column
np.vsplit(a,3)

复制

# id一样,值也一样
a = np.arange(12)
b = a
print(b is a)
print(id(a))
print(id(b))
True
3019571916192
3019571916192
# id不一样,但值是一样的
c = a.view()
print(c is a)
c[0] = 1234
print(a)
print(id(a))
print(id(c))
False
[1234    1    2    3    4    5    6    7    8    9   10   11]
3019571916192
3019571956272
# id不一样,值也不一样
a = np.arange(12)
d = a.copy()
print(d is a)
d[0] = 555
print(a)
print(id(a))
print(id(d))
False
[ 0  1  2  3  4  5  6  7  8  9 10 11]
3019571956992
3019571955632

# 返回值最大的那个元素的索引

ind = data.argmax(axis=0) #按列
# 再取出值
data_max = data[ind, range(data.shape[1])]

ndarray扩展

a = np.arange(0,40,10)
print(a)
print("---------------------------")
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]]

排序

print("1、按行从小到大排序:")
a = np.array([[4, 3, 5],
              [1, 2, 1]])
b = np.sort(a, axis=1)
print(b)
print("2、返回从小到大的元素在原ndarray的索引:")
a = np.array([4, 3, 1, 2])
j = np.argsort(a)
print(j)
print("按j索引取出从小到大的序列")
print(a[j])
1、按行从小到大排序:
[[3 4 5]
 [1 1 2]]
2、返回从小到大的元素在原ndarray的索引:
[2 3 1 0]
按j索引取出从小到大的序列
[1 2 3 4]

猜你喜欢

转载自blog.csdn.net/m0_51210480/article/details/111862225