Numpy是Python语言的第三方库,其支持大量高纬度数组与运算,此外NumPy也针对数组运算提供大量的数学函数。机器学习涉及到大量对数组的变换和运算,NumPy就成了必不可少的工具之一。
import numpy as np
np.__version__
创建数组
NumPy的主要对象是多维数组Ndarray。在NumPy中维度Dimensions叫做轴Axes,轴的个数叫做秩Rank。注意,numpy.array和Python标准库array.array并不相同,前者更为强大,这也就是我们学习Numpy的重要原因之一。
np.array([1,2,3])
上方数组是一个秩为1的数组,因为它只有一个轴,而轴的长度为3。
np.array([1,2,3],(4,5,6))
np.zeros((3,4))
'''
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
'''
np.ones((2,3,4));
'''
[[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]]
'''
np.full((3,4),2)
'''
[[2 2 2 2]
[2 2 2 2]
[2 2 2 2]]
'''
np.arange(5)
'''[0 1 2 3 4]'''
np.arange(6).reshape(2,3)
'''
[[0 1 2]
[3 4 5]]
'''
np.eye(3)
'''
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
'''
np.random.tand(2,3)
'''
[[0.59081556 0.22453645 0.36809792]
[0.69839737 0.68837883 0.64003296]]'''
np.random.randint(5,size = (2,3))
'''
[[3 0 3]
[1 0 2]]
'''
a = np.array([10,20,30,40,50])#[10 20 30 40 50]
b = np.arange(1,6)#[1 2 3 4 5]
a = np.array([1,2],[3,4])
np.sum(a);
'''
10
'''
np.sum(a,axis=0)#axis=0表示对每一列求和
'''
[4 6]
'''
np.sum(a,axis=1)#axis=1表示对每一行求和
'''
[3 7]
'''
np.mean(a)#求取平均值
'''
2.5
'''
np.tile(a, (1, 2)) # 将数组a变成一行俩列
'''
[[1 2 1 2]
[3 4 3 4]]
'''
np.tile(a, (2, 1))
'''
[[1 2]
[3 4]
[1 2]
[3 4]]
'''
a = np.array([[3, 6, 4, 11],
[5, 10, 1, 3]])
a.argsort() # 将元素按照行从小到大排序,返回对应位置元素的下标
'''
[[0 2 1 3]
[2 3 0 1]]
'''
#按照列排序
a = np.array([[3, 6, 4, 11],
[5, 10, 1, 3]])
# 按列排序
print(a.argsort(axis=0))
'''
[[0 0 1 1]
[1 1 0 0]]
'''
a = np.array([10, 20, 30, 40, 50])
b = np.arange(1, 6)
print(a); # [10 20 30 40 50]
print(b); # [1 2 3 4 5]
print(a+b);
'''
[10 20 30 40 50]
[1 2 3 4 5]
[11 22 33 44 55]
'''
print(a-b);
'''
[ 9 18 27 36 45]
'''
print(a * b);
'''
[ 10 40 90 160 250]
'''
print(a/b)
'''
[10. 10. 10. 10. 10.]
'''
A = np.array([[1, 2],
[3, 4]])
B = np.array([[5, 6],
[7, 8]])
print(A*B)
'''
[[ 5 12]
[21 32]]'''
A = np.array([[1, 2],
[3, 4]])
B = np.array([[5, 6],
[7, 8]])
print(np.dot(A, B))
'''
[[19 22]
[43 50]]'''
A = np.array([[1, 2],
[3, 4]])
B = np.array([[5, 6],
[7, 8]])
print(np.mat(A) * np.mat(B))
'''
[[19 22]
[43 50]]'''
A = np.array([[1, 2],
[3, 4]])
print(A.T)
'''
[[1 3]
[2 4]]
'''
A = np.array([[1, 2],
[3, 4]])
print(np.linalg.inv(A))
'''
[[-2. 1. ]
[ 1.5 -0.5]]'''
a = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
b = np.array([1, 2, 3])
# 在a的每一行都加上b
print(a + np.tile(b, (3, 1)));
'''
[[ 2 4 6]
[ 5 7 9]
[ 8 10 12]]'''
# 可直接简写为a+ b, numpy自动实现广播功能,当参与运算的操作数的维度不一样时
print(a+b)
'''
[[ 2 4 6]
[ 5 7 9]
[ 8 10 12]]'''
a = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]])
# 表示第二行,第三列的数, 逗号前表示一维,逗号后表示二维,以此类推
3.1 取出某个确定的值
print(a[1, 2]);
'''7'''
# 冒号表示所取的范围,跟列表的索引用法一样,
# 逗号用来区分每个维度,下面的代码表示[取倒数第二行到最后一行, 第二列到第三列
a = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]])
print(a[-2:, 1:3]);
'''[[ 6 7]
[10 11]]'''
print(a[-2:, 1:4]);
print(a[-2:, 1:4]);
'''
[[ 6 7 8]
[10 11 12]]
'''
'''@@@@@@@********看不懂*********'''
# 给a数组的第二列上的每个数加上10
a[np.arange(3), 1] += 10;
print(a);
'''
[[ 1 12 3 4]
[ 5 16 7 8]
[ 9 20 11 12]]
'''
a[np.arange(0), 1] += 10;
print(a);
'''
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
'''
a[np.arange(1), 1] += 10;
print(a);
'''
[[ 1 12 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
'''
a[np.arange(2), 1] += 10;
print(a);
'''
[[ 1 12 3 4]
[ 5 16 7 8]
[ 9 10 11 12]]
'''
'''
@@@@@@@@@@@@不太理解
'''
a = np.arange(10) # 从0开始生成10个数
print(a);
'''
[0 1 2 3 4 5 6 7 8 9]
'''
a = np.arange(3, 7) # 还可以生成特定范围的数
print(a);
'''
[3 4 5 6]
'''
# 还可以这样写, 相当于,一个行对应一个列
a[[0, 1, 2], [1, 1, 1]] += 10
#第一行第二列+10
#第二行第二列+10
#第三行第三列+10
print(a)
'''
[[ 1 12 3 4]
[ 5 16 7 8]
[ 9 20 11 12]]
'''
3.4获取数组中大于或小于某个确定值的数值
result_index = a > 10
print(result_index)
print(a[result_index])
#array([11, 12])
result_index = a > 10;
result_index = a > 10;
print(a[result_index])
'''
[11 12]
'''
print(a[a > 10]);
'''
[11 12]
'''
4.1 使用dtype函数查看数组的数据类型
a = np.array([1, 2, 3])
print(a.dtype);
'''
int32
'''
a = np.array([1.1, 2.2])
print(a.dtype);
'''
float64
'''
a = np.array([1, 1.2])
a.dtype
'''
dtype('float64')
'''
a = np.array([1.1, 2.2], dtype = np.int64) # 将数据类型转换为整数,直接去掉小数部分
a
'''
[1 2]
'''
4.2使用astype转换数据类型
a = np.array(['1.2', '1.3', '1.4'], dtype = np.string_)
'''
[b'1.2' b'1.3' b'1.4']
'''
a.astype(np.float)
'''
[1.2 1.3 1.4]'''