numpy中数组和矩阵的索引方法及不同点

NumPy中数组和矩阵有些重要的区别:
NumPy提供了两个基本的对象:一个N维数组对象和一个通用函数对象。其它对象都是建构在它们之上的。特别的,矩阵是继承自NumPy数组对象的二维数组对象。像平常在Python中一样,索引是从0开始的。传统上我们用矩形的行和列表示一个二维数组或矩阵,其中二维矩阵或数组的行方向为第0轴(竖轴),列方向为第1轴(横轴)。
注:他们的索引一般都采用一维数组或者布尔值组成的数组,而不采用列表或其他序列!基本的切片使用切片对象或整数。例如,A[:]和M[:]的求值将表现得和Python索引很相似。然而要注意很重要的一点就是NumPy切片数组不创建数据的副本;切片提供统一数据的视图。

创建数组和矩阵用来切片:此处的复制为深复制,A为数组,M为矩阵

>>> A = arange(12)
>>> A
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
>>> A.shape = (3,4)
>>> M = mat(A.copy())
>>> print type(A),"  ",type(M)

>>> print A
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
>>> print M
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]] 

重要不同是:

对于数组:
>>> print A[:,1]; print A[:,1].shape
[1 5 9]
(3,)
对于矩阵:
>>> print M[:,1]; print M[:,1].shape
[[1]
 [5]
 [9]]
(3, 1) 

最后两个结果的不同:对二维数组使用一个冒号产生一个一维数组,然而矩阵产生了一个二维矩阵。例如,一个M[2,:]切片产生了一个形状为(1,4)的矩阵,相比之下,一个数组的切片总是产生一个最低可能维度11的数组。例如,如果C是一个三维数组,C[…,1]产生一个二维的数组而C[1,:,1]产生一个一维数组。

那么怎样让数组和矩阵得到的切片结果相同呢?
比如说我们想要保留第一行大于1的列。一种方法是创建布尔索引:

>>> A[0,:]>1
array([False, False, True, True], dtype=bool)
>>> A[:,A[0,:]>1]
array([[ 2,  3],
       [ 6,  7],
       [10, 11]]) 

就是我们想要的!但是索引矩阵没这么方便。

>>> M[0,:]>1
matrix([[False, False, True, True]], dtype=bool)
>>> M[:,M[0,:]>1]
matrix([[2, 3]]) 

这个过程的问题是用“矩阵切片”来切片产生一个矩阵,但是矩阵有个方便的A属性,它的值是数组呈现的。所以我们仅仅做以下替代来得到和数组相同的切片结果:

>>> M[:,M.A[0,:]>1]
matrix([[ 2,  3],
        [ 6,  7],
        [10, 11]]) 

如果我们想要在矩阵两个方向有条件地切片,我们必须稍微调整策略,代之以:

>>> A[A[:,0]>2,A[0,:]>1]
array([ 6, 11])
>>> M[M.A[:,0]>2,M.A[0,:]>1]
matrix([[ 6, 11]]) 
好的,我可以为您总结一下Numpy数组矩阵运算实验的内容。 NumpyPython用于科学计算的一个重要的库,它提供了高性能的多维数组对象以及各种计算和操作这些数组的函数。Numpy数组矩阵运算实验主要包括以下内容: 1. Numpy数组的创建与索引:可以使用Numpy提供的array()函数创建一维或多维数组,并且可以使用索引和切片来访问数组的元素。 2. Numpy数组的基本运算:Numpy提供了基本的数组运算,包括加、减、乘、除等,可以对数组进行逐元素的运算。 3. Numpy数组的聚合运算:Numpy提供了一些常用的聚合函数,比如sum()、min()、max()、mean()等,可以对数组的元素进行聚合运算。 4. Numpy数组的逻辑运算:Numpy提供了逻辑运算符,可用于数组元素的逻辑判断,如and、or等。 5. 矩阵的创建与运算:Numpy提供了矩阵对象,可使用matrix()函数创建矩阵矩阵之间的运算包括加、减、乘、转置等。 6. 广播:Numpy提供了广播功能,可以使得不同形状的数组在运算时具有相同的形状。 通过实验练习,可以掌握Numpy数组矩阵运算的基本操作,如数组创建、索引、运算、聚合、逻辑运算以及矩阵创建、运算、转置等。同时,实验也会涉及到一些高级的Numpy应用,比如随机数生成、线性代数运算、数组的拼接、切分和重塑等,这些内容需要结合实际应用场景进行练习。 总的来说,Numpy数组矩阵运算实验是Python科学计算非常重要的部分,需要反复练习和实践,才能掌握这些知识点并灵活运用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值