数据分析入门之Numpy 矩阵与通用函数

1、创建Numpy矩阵

1.1、创建与组合矩阵

1.1.1、使用mat函数创建矩阵

import numpy as np

(1) 创建一个二维数组

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

(2) 创建一个矩阵

a = np.mat([[1,2],[3,4]])
a
matrix([[1, 2],
        [3, 4]])

1.1.2、使用matrix函数创建矩阵

b = np.matrix([[1,2],[3,4]])
b
matrix([[1, 2],
        [3, 4]])

1.1.3、使用bmat函数合成矩阵

np.bmat('a b')
matrix([[1, 2, 1, 2],
        [3, 4, 3, 4],
        [1, 2, 1, 2],
        [3, 4, 3, 4]])

1.2、矩阵的运算

  • 二维数组的乘法运算
a = [[1,2],[3,4]]
b = [[1,1],[1,2]]
np.array(a)*np.array(b)#对应位置相乘
array([[1, 2],
       [3, 8]])

1.2.1、举证运算

(1) 查看两个矩阵

print(np.mat(a))
print(np.mat(b))
[[1 2]
 [3 4]]
[[1 1]
 [1 2]]

(2) 矩阵相乘

np.mat(a) * np.mat(b)
matrix([[ 3,  5],
        [ 7, 11]])

结论: 横x列之和,横往右走,列往下走

  • 1x1+2x1=3
  • 1x1+2x2=5
  • 3x1+4x1=7
  • 3x1+4x2=11

(3) 用.dot对数组做矩阵乘法

np.array(a).dot(np.array(b))
array([[ 3,  5],
       [ 7, 11]])

1.3、矩阵特有属性

(1) 属性T 返回自身的转置

print (np.matrix(a))
np.matrix(a).T
[[1 2]
 [3 4]]
matrix([[1, 3],
        [2, 4]])

(2) 属性I 返回自身的逆矩阵

print (np.matrix(a))
np.matrix(a).I
[[1 2]
 [3 4]]
matrix([[-2. ,  1. ],
        [ 1.5, -0.5]])

(3) 属性H 返回自身的共轭转置

print (np.matrix(a))
np.matrix(a).H
[[1 2]
 [3 4]]
matrix([[1, 3],
        [2, 4]])

(4) 返回自身数据的2维数组的一个视图

print (np.matrix(a))
np.matrix(a).A
[[1 2]
 [3 4]]
array([[1, 2],
       [3, 4]])


2、认识ufunc函数

  • 全称通用函数(universal function),是一种能够对数组中所有元素进行操作的函数。

• 四则运算:加(+)、减(-)、乘(*)、除(/)、幂(**)。数组间的四则运算表示对每个数组中的元素分别进行四则运算,所以形状必须相同。
• 比较运算:>、<、==、>=、<=、!=。比较运算返回的结果是一个布尔数组,每个元素为每个数组对应元素的比较结果。
• 逻辑运算:np.any函数表示逻辑“or”,np.all函数表示逻辑“and”。运算结果返回布尔值。

a
[[1, 2], [3, 4]]

2.1、如何把a全部平方?

[[j**2 for j in i] for i in a]
[[1, 4], [9, 16]]

a转为多维数组后做乘法:

np.array(a)**2
array([[ 1,  4],
       [ 9, 16]], dtype=int32)

2.2 ufunc函数的广播机制

  • 广播(broadcasting)是指不同形状的数组之间执行算术运算的方式。需要遵循4个原则。

    1. 让所有输入数组都向其中shape最长的数组看齐,shape中不足的部分都通过在前面加1补齐。
    2. 输出数组的shape是输入数组shape的各个轴上的最大值。
    3. 如果输入数组的某个轴和输出数组的对应轴的长度相同或者其长度为1时,这个数组能够用来计算,否则出错。
    4. 当输入数组的某个轴的长度为1时,沿着此轴运算时都用此轴上的第一组值。
a = [[0]*3,[1]*3,[2]*3,[2]*3]
a
[[0, 0, 0], [1, 1, 1], [2, 2, 2], [2, 2, 2]]

(1) 把a转化为数组

np.array(a)
array([[0, 0, 0],
       [1, 1, 1],
       [2, 2, 2],
       [2, 2, 2]])

(2) 数组相加运算

np.array(a) + np.array(a)
array([[0, 0, 0],
       [2, 2, 2],
       [4, 4, 4],
       [4, 4, 4]])

(3) 当数组长度不够时,它会自动重复补齐

np.array(a) + np.array([[1],[2],[3],[4]])
array([[1, 1, 1],
       [3, 3, 3],
       [5, 5, 5],
       [6, 6, 6]])
发布了62 篇原创文章 · 获赞 25 · 访问量 9298

猜你喜欢

转载自blog.csdn.net/ayouleyang/article/details/103966079