Numpy 对于矩阵的操作持续更新

Posted 老张哈哈哈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Numpy 对于矩阵的操作持续更新相关的知识,希望对你有一定的参考价值。

>>> import numpy as np
>>> a = np.random.randint(10,size=(5,5))
>>> a
array([[0, 8, 3, 0, 2],
       [0, 6, 6, 6, 3],
       [0, 3, 6, 8, 7],
       [2, 6, 1, 4, 4],
       [4, 1, 5, 6, 4]])

 

1. 数组切片

随机生成5x5的一个矩阵

提取矩阵第n列

>>> a[:,3]
array([0, 6, 8, 4, 6])

提取矩阵第n行

>>> a[3,:]
array([2, 6, 1, 4, 4])

提取矩阵第n行到第n+m行

>>> a[1:4]
array([[0, 6, 6, 6, 3],
       [0, 3, 6, 8, 7],
       [2, 6, 1, 4, 4]])

提取矩阵第n行到第n+m列

>>> a[:,1:4]
array([[8, 3, 0],
       [6, 6, 6],
       [3, 6, 8],
       [6, 1, 4],
       [1, 5, 6]])

使用布尔数组选取数据集中大于4的数字

>>> a[a>4]
array([8, 6, 6, 6, 6, 8, 7, 6, 5, 6])

使用布尔数组选取数据集中第二列大于3的数字所在的行

>>> a[a[:,1]>3]
array([[0, 8, 3, 0, 2],
       [0, 6, 6, 6, 3],
       [2, 6, 1, 4, 4]])

使用布尔数组选取数据集中第二列等于3的数字所在的行

>>> a[a[:,1]==6]
array([[0, 6, 6, 6, 3],
       [2, 6, 1, 4, 4]])

使用布尔数组设置值,把数组a中小于4的值都设置为0

>>> a[a<4]=0
>>> a
array([[0, 8, 0, 0, 0],
       [0, 6, 6, 6, 0],
       [0, 0, 6, 8, 7],
       [0, 6, 0, 4, 4],
       [4, 0, 5, 6, 4]])

使用一维布尔数组设置整行或列:把第一列中含有数字6的行,全部设置为7

>>> a[a[:,1]==6]=7
>>> a
array([[0, 8, 3, 0, 2],
       [7, 7, 7, 7, 7],
       [0, 3, 6, 8, 7],
       [7, 7, 7, 7, 7],
       [4, 1, 5, 6, 4]])

取特定顺序行的数组,通过传递一个列表或整形ndarray来指定想要的顺序

>>> a[[1,3,4]]
array([[7, 7, 7, 7, 7],
       [7, 7, 7, 7, 7],
       [4, 1, 5, 6, 4]])

 

2.数组索引

返回array中数字6的索引值

>>> np.where(a==6)
(array([1, 1, 1, 2, 3, 4]), array([1, 2, 3, 2, 1, 3]))

返回的是一个tuple,第一个代表的是按列查找的索引值,第二个代表的是按行查找的索引值

类似的

>>> np.argwhere(a==6)
array([[1, 1],
       [1, 2],
       [1, 3],
       [2, 2],
       [3, 1],
       [4, 3]])

返回的是一个array

 

3.类型转换

类型转换

>>> a.astype(np.float)
array([[0., 8., 3., 0., 2.],
       [0., 6., 6., 6., 3.],
       [0., 3., 6., 8., 7.],
       [2., 6., 1., 4., 4.],
       [4., 1., 5., 6., 4.]])
>>> a.astype(np.str)
array([[0, 8, 3, 0, 2],
       [0, 6, 6, 6, 3],
       [0, 3, 6, 8, 7],
       [2, 6, 1, 4, 4],
       [4, 1, 5, 6, 4]], dtype=<U21)

数组和纯量之间的操作

>>> a*a
array([[ 0, 64,  9,  0,  4],
       [ 0, 36, 36, 36,  9],
       [ 0,  9, 36, 64, 49],
       [ 4, 36,  1, 16, 16],
       [16,  1, 25, 36, 16]])
>>> a-a
array([[0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0]])

纯量的算术操就是把操作值作用于每一个元素

>>> a-3
array([[-3,  5,  0, -3, -1],
       [-3,  3,  3,  3,  0],
       [-3,  0,  3,  5,  4],
       [-1,  3, -2,  1,  1],
       [ 1, -2,  2,  3,  1]])
>>> a*3
array([[ 0, 24,  9,  0,  6],
       [ 0, 18, 18, 18,  9],
       [ 0,  9, 18, 24, 21],
       [ 6, 18,  3, 12, 12],
       [12,  3, 15, 18, 12]])

 

以上是关于Numpy 对于矩阵的操作持续更新的主要内容,如果未能解决你的问题,请参考以下文章

Python刷题实用小tips集合(持续更新)

回归 | js实用代码片段的封装与总结(持续更新中...)

小程序各种功能代码片段整理---持续更新

对于 Hermitian 矩阵,numpy.linalg.eig 给出的结果与 numpy.linalg.eigh 不同

numpy学习

numpy 学习总结