python基础---有关nparray----切片和索引(一)

    Numpy最重要的一个特点就是其N维数组对象,即ndarray,该对象是一种快速而灵活的大数据集容器,实际开发中,我们可以利用这种数组对整块数据执行一些数学运算。

    有关ndarray,我们就从最简单的一维数组操作以及其构造开始说起:

    

import numpy as np

if __name__ == '__main__':
    print(1)
    #输出一个字典对象i+rand
print({i :np.random.rand() for i in range(2)})
    #输出字典对象i+list(rand)
print({i: np.random.rand(2) for i in range(2)})

    #在变量前面加一个?问号,可以将有关该对象的一些通用信息显示出来
a=[]

    for i in range(3):
        #这里b就是一个有3个随机小数的数组
b = np.random.rand(3)
        print(b.shape)
        print(b)
        a.append(b)
    print(a)

    #从管道中输出a
    # print(a.pop(0))
    # print(a)
    #通过array这个方法将a数组转成nparray
c=np.array(a)
    print("c============",c)

    #这里随机获取一个二维数组
d=np.empty((3,6))
    print(d)


    #np的基本索引和切片
    #先生成一个从0到10的一维数组[0 1 2 3 4 5 6 7 8 9]
arr=np.arange(10)

    #针对这个np我们可以简单切片,比如我要获取5,6,7可以通过这个方法:arr[开始的index,结束的index],这里的index从0开始,
    #左包含右不包含
arr1=arr[5:8]
    print(arr1)

    #对一个切片进行赋值时,该值会传播整个选取:比如arr[5:8]=12的输出值就是[ 0  1  2  3  4 12 12 12  8  9]
arr[5:8]=12
print(arr)

    #如果操作需要,我们可以针对切片中再一次进行切片赋值
arr_slice=arr[4:8]  #[4,12,12,12]
print(arr_slice[0]) #4
print(arr_slice[1])  # 12
arr_slice[0:2]=89
print(arr_slice)    #[89 89 12 12]
print(arr)  #[ 0  1  2  3 89 89 12 12  8  9]
    #如果你想要得到的是ndarray切片的一份副本而不是视图,就需要进行复制操作,比如
arrCopy=arr.copy()
    print(arrCopy)

当然,针对多元的数据更加需要多元的数组,比如二维数组,这里针对二维数组切片和索引进行简单的讲解:

#如果是多维数组,比如一个二维数组,我们操作可以如下,先生成一个2维数组:[[0 1 2][3 4 5][6 7 8]]
x=[]
for i in range(3):

    x1=np.arange(3*i,3*i+3)
    x.append(x1)

arr2d=np.array(x)
print(arr2d)

#我们可以看看这个二维数组如何切片,有关切片索引
print(arr2d[1]) # [3 4 5]
# 二维数组切片索引和一维稍微不同,以下两个两两等价
print(arr2d[0:2])  # [[0 1 2][3 4 5]]
print(arr2d[:2])  # [[0 1 2][3 4 5]]
print(arr2d[2][0]) # 6
print(arr2d[2,:1]) #[6]
print(arr2d[2,:2])  #[6 7]
#更多维数组操作也类似上面一样,举一反三

更多维度的数组操作也类似上面,我们可以举一反三,除了这一部分之外,还有布尔索引和花式索引

花式索引:花式索引是一个numpy术语,它指利用整数数组进行索引,例如,我们使用一个8*4的数组

#有关花式索引
#花式索引是一个numpy术语,它指利用整数数组进行索引,例如,我们使用一个8*4的数组
# arr=np.empty((8,4))
arr=np.arange(32).reshape((8,4))
print(arr)

#以特定顺序选取子集,这里选取的就是第5,4,1,7行的子数组
print(arr[[4,3,0,6]])

#如果我们使用负数索引,则选取的从末尾开始-1为最后一行,-2为倒数第二行
print(arr[[-1,-2]])

#这里输出的分别是arr第5行的第一个数,第4行的第2个数,第1行的第3个数和第7行的第4个数组成的数组
print(arr[[4,3,0,6],[0,1,2,3]])

#这里输出分别为arr第5,4,1,7行的第1,2,3个数组成的数组
#[[16 17 18] [12 13 14] [ 0  1  2] [24 25 26]]
print(arr[[4,3,0,6]][:,[0,1,2]])


原文地址:https://www.cnblogs.com/asd529735325/p/10216035.html