Numpy介绍

Numpy介绍

Numpy是Python语言的第三方库,其支持大量高纬度数组与运算,此外NumPy也针对数组运算提供大量的数学函数。机器学习涉及到大量对数组的变换和运算,NumPy就成了必不可少的工具之一。

一、如何创建

1.导入Numpy库,并命名为np:

import numpy as np

2.查看版本

np.__version__

创建数组

NumPy的主要对象是多维数组Ndarray。在NumPy中维度Dimensions叫做轴Axes,轴的个数叫做秩Rank。注意,numpy.array和Python标准库array.array并不相同,前者更为强大,这也就是我们学习Numpy的重要原因之一。

3.通过列表创建一维数组:

np.array([1,2,3])

上方数组是一个秩为1的数组,因为它只有一个轴,而轴的长度为3。

4.通过列表创建二维数组:

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

5.创建全为0的二维数组

np.zeros((3,4))
'''
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
'''

6.创建全为1的三维数组

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.]]]

'''

full函数,创建任意大小的数组,并填充任意数字

np.full((3,4),2)
'''
[[2 2 2 2]
 [2 2 2 2]
 [2 2 2 2]]
'''

7.创建一维等差数组:

np.arange(5)
'''[0 1 2 3 4]'''

8.创建二维等差数组:

np.arange(6).reshape(2,3)
'''
[[0 1 2]
 [3 4 5]]
'''

9.创建单位矩阵(二维数组):

np.eye(3)
'''
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
 '''

10.创建二维随机数组:

np.random.tand(2,3)
'''
[[0.59081556 0.22453645 0.36809792]
 [0.69839737 0.68837883 0.64003296]]'''

11.创建二维随机整数数组(数值小于5)

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]

sum

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]
'''

mean

np.mean(a)#求取平均值
'''
2.5
'''

title

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]]
'''

argsort

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]]
 '''

12.一维数组加法运算:

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]
'''

13.一维数组减法运算:

print(a-b);
'''
[ 9 18 27 36 45]
'''

14.一维数组乘法运算:

print(a * b);
'''
[ 10  40  90 160 250]
'''

15.一维数组除法运算:

print(a/b)
'''
[10. 10. 10. 10. 10.]
'''

16.二维数组的运算,相应位置上进行±:

A = np.array([[1, 2],
              [3, 4]])
B = np.array([[5, 6],
              [7, 8]])
print(A*B)
'''
[[ 5 12]
 [21 32]]'''

17.矩阵乘法运算(注意与上题的区别):

A = np.array([[1, 2],
              [3, 4]])
B = np.array([[5, 6],
              [7, 8]])
print(np.dot(A, B))
'''
[[19 22]
 [43 50]]'''

18.如果使用np.mat将二维数组准确定义为矩阵,就可以直接使用*完成矩阵乘法计算:

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]]'''

19.转置矩阵

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

print(A.T)
'''
[[1 3]
 [2 4]]
 '''

20.矩阵求逆:

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'''

3.2取出某个范围的值

# 冒号表示所取的范围,跟列表的索引用法一样,
# 逗号用来区分每个维度,下面的代码表示[取倒数第二行到最后一行, 第二列到第三列
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]]
'''

'''@@@@@@@********看不懂*********'''

3.3给某个范围的数进行运算

# 给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]'''

你可能感兴趣的:(python,矩阵,几何学)