目录
19、np.multiply()、np.dot()和星号(*)三种乘法运算的区别★
1、Numpy 基础学习
官方快速入门文档:
菜鸟教程:
NLP Numpy、Pandas、Scikit-learn资料:
NLP Numpy、Pandas、Scikit-learn资料下载
2、列表与numpy数组的区别、数组的创建
列表:可以保存多种数据类型
import numpy as np
list1 = [1,'1','a',True]
print(list1)
[1, '1', 'a', True]
ndarray:只能保存一种数据类型【将优先级低的数据类型转化为优先级高的数据类型】
import numpy as np
list1 = [1,'1','a',True]
arr1 = np.array(list1)
print(arr1)
['1' '1' 'a' 'True']
数组的创建
arr3 = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 1, 2, 3]])
print(arr3)
arr4 = np.array([[[1, 2, 3, 4], [5, 6, 7, 8], [9, 1, 2, 3]],
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 1, 2, 3]]])
print(arr4)
3、查看数组的结构
import numpy as np
arr4 = np.array([[[1, 2, 3, 4], [5, 6, 7, 8], [9, 1, 2, 3]],
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 1, 2, 3]]])
print(arr4.shape)
4、查看数组的类型
import numpy as np
arr4 = np.array([[[1, 2, 3, 4], [5, 6, 7, 8], [9, 1, 2, 3]],
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 1, 2, 3]]])
print(arr4.dtype)
5、查看数组的大小
import numpy as np
arr4 = np.array([[[1, 2, 3, 4], [5, 6, 7, 8], [9, 1, 2, 3]],
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 1, 2, 3]]])
print(arr4.size)
6、更改数组的结构
.shape = ( ,,) 更改【原数组会发生改变】
import numpy as np
arr4 = np.array([[[1, 2, 3, 4], [5, 6, 7, 8], [9, 1, 2, 3]],
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 1, 2, 3]]])
arr4.shape = (4,2,3)
print(arr4)
.reshape更改【原始数组不会发生改变,返回一个新的对象】
import numpy as np
arr4 = np.array([[[1, 2, 3, 4], [5, 6, 7, 8], [9, 1, 2, 3]],
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 1, 2, 3]]])
arr5 = arr4.reshape((4,3,2))
print(arr5)
print(arr4)
7、arange函数
li1 = [0, 1, 2, 3, 4]
print(li1)
li2 = list(range(5))
print(li2)
aran1 = np.arange(5)
print(aran1)
aran2 = np.arange(1, 10, 0.5) # 先比与 python 原始的 range,可以指定步长为小数
print(aran2)
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4]
[0 1 2 3 4]
[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]
8、linspace函数——返回等差数组
arr5 = np.linspace(1, 10, 31) # 默认是包含结尾的闭区间
print(arr5)
print(arr5.size)
[ 1. 1.3 1.6 1.9 2.2 2.5 2.8 3.1 3.4 3.7 4. 4.3 4.6 4.9
5.2 5.5 5.8 6.1 6.4 6.7 7. 7.3 7.6 7.9 8.2 8.5 8.8 9.1
9.4 9.7 10. ]
31
9、logspace函数——返回等比数列
arr6 = np.logspace(1, 5, 6) # 1,5 默认值得是 10的n次方,与等差数列一样,默认是闭区间
print(arr6)
[1.00000000e+01 6.30957344e+01 3.98107171e+02 2.51188643e+03
1.58489319e+04 1.00000000e+05]
10、创建特殊的数组
arr7 = np.zeros((2, 3))
print(arr7)
arr8 = np.eye(4) # 单位矩阵
print(arr8)
arr9 = np.diag((2, 3, 4, 6)) # 对角矩阵
print(arr9)
arr10 = np.ones((3, 4)) # 全1矩阵
print(arr10)
[[0. 0. 0.]
[0. 0. 0.]]
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]]
[[2 0 0 0]
[0 3 0 0]
[0 0 4 0]
[0 0 0 6]]
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
11、生成随机数
import random
print(random.random()) # 随机生成0-1之间的一个数
print(random.randint(2, 4)) # 随机生成2-4(含)之间的一个数
print(random.choice(["a", "b", "c"]))
print(np.random.random(10))
print(np.random.rand(2, 3, 4))
print(np.random.randn(2, 3))
print(np.random.randint(2, 5, size=(3, 4))) # 不包含上限
print(np.random.choice(["a", "b", "c"], 2, replace=False)) # replace=False ,不放回随机取
0.2901015268998839
4
c
[0.42173402 0.704976 0.59077395 0.75296426 0.42705292 0.94097519
0.45795971 0.3592067 0.97336565 0.59920003]
[[[0.7065555 0.06316032 0.50742253 0.24976952]
[0.17416443 0.92715352 0.00334854 0.75149703]
[0.9538456 0.84476862 0.95255708 0.70714702]]
[[0.79395875 0.9714903 0.28513388 0.41298319]
[0.86979584 0.89509482 0.38986048 0.75104968]
[0.67466791 0.4672155 0.39372941 0.07380121]]]
[[ 0.32389886 -1.41339375 -0.85613552]
[ 0.73887919 0.20162813 1.76233156]]
[[4 2 4 3]
[3 2 2 4]
[4 3 2 4]]
['b' 'c']
12、一维数组的索引和切片
a1 = np.arange(10)
print(a1)
print(a1[4])
print(a1[4:8])
print(type(a1[4:8]))
print(a1[-1])
print(a1[::-2]) # 倒着来取,且步长为 2
print(a1[:])
[0 1 2 3 4 5 6 7 8 9]
4
[4 5 6 7]
<class 'numpy.ndarray'>
9
[9 7 5 3 1]
[0 1 2 3 4 5 6 7 8 9]
13、多维数组的索引和切片★
arr = np.array([[1, 2, 3, 4, 5],
[4, 5, 6, 7, 8],
[7, 8, 9, 10, 11]])
# 索引的两种方式
print(arr[0][1])
print(arr[1, 2])
# 切片
print(arr[1][1:3])
print(arr[1, 1:3])
print(arr[1:3, 2:4])
print(arr[1:, 1:])
print(arr[1:3, 2:4])
2
6
[5 6]
[5 6]
[[ 6 7]
[ 9 10]]
[[ 5 6 7 8]
[ 8 9 10 11]]
14、拉伸数组的形状
print(a3.ravel())
print(a3.flatten("C"))
print(a3.flatten("F"))
[ 0 1 2 3 4 5 6 7 8 9 10 11]
[ 0 1 2 3 4 5 6 7 8 9 10 11]
[ 0 4 8 1 5 9 2 6 10 3 7 11]
15、数组的拼接与分割
拼接
arr1 = np.arange(1, 7).reshape((3, 2))
arr2 = np.arange(11, 17).reshape((3, 2))
print(arr1)
print(arr2)
print(np.hstack((arr1, arr2)))
print(np.vstack((arr1, arr2)))
print(np.concatenate((arr1, arr2), axis=1))
print(np.concatenate((arr1, arr2), axis=0))
[[1 2]
[3 4]
[5 6]]
[[11 12]
[13 14]
[15 16]]
[[ 1 2 11 12]
[ 3 4 13 14]
[ 5 6 15 16]]
[[ 1 2]
[ 3 4]
[ 5 6]
[11 12]
[13 14]
[15 16]]
[[ 1 2 11 12]
[ 3 4 13 14]
[ 5 6 15 16]]
[[ 1 2]
[ 3 4]
[ 5 6]
[11 12]
[13 14]
[15 16]]
分割
arr11 = np.arange(8).reshape((2, 4))
print(arr11)
print(np.hsplit(arr11, 2))
print(np.vsplit(arr11, 2))
print(np.split(arr11, 2, axis=1))
print(np.split(arr11, 2, axis=0))
[[0 1 2 3]
[4 5 6 7]]
[array([[0, 1],
[4, 5]]), array([[2, 3],
[6, 7]])]
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]])]
[array([[0, 1],
[4, 5]]), array([[2, 3],
[6, 7]])]
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]])]
16、np.any 、np.all
arr12 = np.array([True, True, False])
arr13 = np.array([True, True, True])
arr14 = np.array([False, False, False])
print(np.any(arr12))
print(np.any(arr14))
print(np.all(arr12))
print(np.all(arr13))
True
False
False
True
17、广播★
arr15 = np.arange(15).reshape((5, 3))
print(arr15)
arr16 = np.array([1, 2, 3])
print(arr15 + arr16)
arr17 = np.array([1, 2, 3])
print(arr15 + arr17)
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]
[12 13 14]]
[[ 1 3 5]
[ 4 6 8]
[ 7 9 11]
[10 12 14]
[13 15 17]]
[[ 1 3 5]
[ 4 6 8]
[ 7 9 11]
[10 12 14]
[13 15 17]]
18、排序
arr21 = np.array([4, 3, 2])
print(sorted(arr21)) # 返回临时排序的列表【python内置方法】
print(arr21) # 原数组
# numpy 方法
print(arr21.argsort()) # 排序后的初始下标
arr21.sort() # 不返回值,只进行排序操作
print(arr21) # 排序后数组
19、np.multiply()、np.dot()和星号(*)三种乘法运算的区别★
np.multiply 与 * 数乘操作
np.dot() 矩阵乘法
20、几个重要的函数
# 几个重要函数
arr22 = np.array([3, 4, 2, 1, 1, 3, 2, 4])
print(np.unique(arr22)) # 去重
print(np.tile(arr21, 5)) # 延伸
print(np.repeat(arr21, [3, 2, 1])) # 重复
arr23 = np.arange(6).reshape((2, 3))
print(arr23)
print(np.repeat(arr23, 2, axis=1))
print(np.repeat(arr23, 2, axis=0))
print(np.tile(arr23, 2))
print(np.tile(arr23, 2))
print(arr23.sum(axis=0))
print(arr23.mean())
print(arr23.std())
print(arr23.var())
print(arr23.argmax(axis=0)) # 取某一轴的最大值得下标
print(arr23.argmin(axis=1))
print(arr23.cumsum())