Python之Numpy学习(3)

本文介绍了Python的Numpy库中sort方法的使用,特别是在多维数据上的应用。此外,还探讨了如何利用Numpy数组进行集合操作,如交集和并集。另外,文章对比了ravel和flatten方法的区别,前者返回原数组的视图,后者返回拷贝。最后,提到了numpy.linalg模块,该模块提供了矩阵操作的功能,包括求逆矩阵和行列式计算等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sort方法使用,对于多维数据可以指定对指定轴排序,默认是最里面一层数据排序

In [8]: arr = np.random.randn(3,2,2)

In [9]: arr
Out[9]:
array([[[ 1.17120187,  1.46243415],
        [ 1.03303677,  0.046324  ]],

       [[ 0.54480189, -1.53867658],
        [-2.71762905, -0.8470151 ]],

       [[-0.8524279 , -1.50170625],
        [-0.32525088,  0.33931581]]])

In [10]: arr.sort()#等价于arr.sort(axis = 2)  默认对最内层排序

In [11]: arr
Out[11]:
array([[[ 1.17120187,  1.46243415],
        [ 0.046324  ,  1.03303677]],

       [[-1.53867658,  0.54480189],
        [-2.71762905, -0.8470151 ]],

       [[-1.50170625, -0.8524279 ],
        [-0.32525088,  0.33931581]]])

In [12]: arr.sort(axis = 1)#对第二维的数据排序

In [13]: arr
Out[13]:
array([[[ 0.046324  ,  1.03303677],
        [ 1.17120187,  1.46243415]],

       [[-2.71762905, -0.8470151 ],
        [-1.53867658,  0.54480189]],

       [[-1.50170625, -0.8524279 ],
        [-0.32525088,  0.33931581]]])

除了排序外,数组可以使用像集合一样使用交集、并集等

数组的集合操作
方法描述
unique(x)计算x的唯一值,并排序
intersect1d(x,y)计算x和y的交集,并排序
union1d(x,y)计算x和y的并集,并排序
in1d(x,y)计算x中的元素是否包含在y中,返回一个布尔值数组
setdiff1d(x,y)差集,在x中不在y中的x中的元素
setxor1d(x,y)异或集,在x或y中,但不属于x,y交集的元素

 

In [14]: arr = np.array([5,2,3,5,4,7,-5,3])

In [15]: np.unique(arr)
Out[15]: array([-5,  2,  3,  4,  5,  7])

In [16]: arr2 = np.array([5,2,3,56,20,7])

In [17]: np.intersect1d(arr,arr2)
Out[17]: array([2, 3, 5, 7])

In [18]: np.in1d(arr,arr2)
Out[18]: array([ True,  True,  True,  True, False,  True, False,  True])

ravle()和flatten()方法的异同

两者都可以将多维数组降维,但是ravel返回的是原数组的视图,即修改返回值,原数组也会变化;而flatten返回的是原数组的拷贝,修改后对原数组无影响。

In [32]: arr = np.random.randn(2,4)

In [33]: arr
Out[33]:
array([[-1.19249445,  0.90393918,  1.40165374, -0.01446315],
       [ 0.92437731, -0.04495734, -0.68258786, -1.28977605]])

In [34]: arr_r = arr.ravel()

In [35]: arr_r
Out[35]:
array([-1.19249445,  0.90393918,  1.40165374, -0.01446315,  0.92437731,
       -0.04495734, -0.68258786, -1.28977605])

In [36]: arr_r[0] = 120#会修改原数组的值

In [37]: arr
Out[37]:
array([[ 1.20000000e+02,  9.03939180e-01,  1.40165374e+00,
        -1.44631494e-02],
       [ 9.24377308e-01, -4.49573368e-02, -6.82587861e-01,
        -1.28977605e+00]])

In [38]: arr_f = arr.flatten()

In [39]: arr_f
Out[39]:
array([ 1.20000000e+02,  9.03939180e-01,  1.40165374e+00, -1.44631494e-02,
        9.24377308e-01, -4.49573368e-02, -6.82587861e-01, -1.28977605e+00])

In [40]: arr_f[2] = 20#不会修改原数组的值

In [41]: arr
Out[41]:
array([[ 1.20000000e+02,  9.03939180e-01,  1.40165374e+00,
        -1.44631494e-02],
       [ 9.24377308e-01, -4.49573368e-02, -6.82587861e-01,
        -1.28977605e+00]])

对于矩阵操作,numpy.linalg提供了矩阵分界的标准函数集,例如求逆矩阵、行列式求解等。具体请参见参考手册

In [53]: arr
Out[53]:
array([[ 1.46806441,  0.19445202, -0.34534805],
       [ 0.83256583,  0.61142511,  0.22859295],
       [ 0.79464301,  0.64171819,  0.15349091]])

In [54]: np.linalg.inv(arr)#计算逆矩阵
Out[54]:
array([[ 0.63042299,  2.9999192 , -3.04933378],
       [-0.64252518, -5.9621098 ,  7.43367422],
       [-0.57750079,  9.39553691, -8.77701631]])

In [55]: np.linalg.det(arr)#计算行列式的值
Out[55]: -0.08382317146417889

In [57]: np.linalg.eig(arr)#计算特征值和特征向量
Out[57]:
(array([ 1.14805943+0.09782184j,  1.14805943-0.09782184j,
        -0.06313842+0.j        ]),
 array([[ 0.26666976+0.08169649j,  0.26666976-0.08169649j,
          0.24891421+0.j        ],
        [ 0.69570909+0.j        ,  0.69570909-0.j        ,
         -0.57205867+0.j        ],
        [ 0.6619681 +0.00016551j,  0.6619681 -0.00016551j,
          0.78153093+0.j        ]]))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值