python进阶(数据分析numpy库 二)

 2、ndarray数组的切片:

       (1)数组切片的基本知识

            各个维度上单独切片,用 “,” 隔开,用 “:”表示该维度所有的值。

            数组切片获得的 新数组与原数据组共用一个  内存空间,切片数组更改数据原数组也会更改。

           ndarray 的切片与列表方式切片有一些区别,尽量用数组方式。

import numpy as np
list1 = [
  [ [1,2,3],
    [3,2,1]],

  [ [4,5,6],
    [6,5,4]],

  [ [7,8,9],
    [9,8,7]]]
arr1 = np.array(list1)

 (一)数组切片与列表方式切片的区别:

print(arr1[1,:,1:3])  
数组切片:
[[5 6]
 [5 4]]
print(arr1[1][:][1:3])
列表方式:
[[6 5 4]]

(二)数组切片用法:

           切第二行的元素
print(arr1[1,:,:])
print(arr1[1])
           
print(arr1[1,:,1:3])
[[5 6]
 [5 4]]

 (2)切片数组赋值列表或数组:

赋值列表
import numpy as np
arr1 = np.random.randint(1,9,(3,4))
arr1[:,::2] = [100,100]
print(arr1) 

  [[100   6 100   2]
 [100   6 100   1]
 [100   3 100   5]]
赋值数组
import numpy as np
arr1 = np.random.randint(1,9,(3,12))
arr1[:,::2] = np.array([100,100,100,100,100,100])
print(arr1)

[[100   4 100   3 100   5 100   7 100   8 100   8]
 [100   2 100   1 100   3 100   8 100   3 100   1]
 [100   6 100   1 100   1 100   6 100   8 100   2]]

(3)花式索引:用整数数组进行索引。

               注意 内部函数  .ix_( 索引数组1,索引数组2  ) 的用法。

               也可用转置( .T )来取与 .ix_()方法一样的结果。

import numpy as np
arr1 = np.arange(1,31,1).reshape(6,5)
print(arr1)
# 获得第 2 4 5 行的所有元素
print(arr1[[1,3,4]])
# 注意这里取的是 (1,1) (3,2) (4,4) 四个元素
print(arr1[[1,3,4],[1,2,4]])
# 取得时是所有 第 2 4 5 行 与 1,2,4列的元素。 用 内部函数  np.ix_( 索引数组1,索引数组2  )
print(arr1[np.ix_([1,3,4],[1,2,4])])
# 也可以用转置 来取,与 np.ix_( )结果相同。
print(arr1[[1,3,4]].T[[1,2,4]].T)

 (4)bool值数组索引:

                    利用布尔类型的数组进行数据索引,最终返回的结果是对应索引数组中数据为True位置的值

实例用法:  

    ①  

求数组 数 > 5 的所有数。
import numpy as np
arr1 = np.arange(1,11,1).reshape(2,5)
# [[ 1  2  3  4  5]
#  [ 6  7  8  9 10]]
print(arr1 > 5)
# [[False False False False False]
#  [ True  True  True  True  True]]
print(arr1[arr1 > 5])
# [ 6  7  8  9 10]

    ②

            

names = np.array(['joe','tom','anne'])
scores = np.array([[70,80,90],
                   [77,88,91],
                   [80,90,70]])
classes = np.array(['语文','数学','英语'])
# 输出 joe 的成绩
bool_1 = names == 'joe'
print(bool_1)                              [ True False False]
print(scores[bool_1])        #  [[70 80 90]]
# 输出joe的数学成绩
bool_2 = classes == '数学'
print(bool_2)                              [False  True False]
print(scores[bool_1,bool_2])   # [80]
# 第三题
print(scores[(names == 'joe')|(names == 'anne')]) 
# [[70 80 90]
#  [80 90 70]]
#第四题
print(scores[(names != 'joe') & (names != 'anne')])  # [[77 88 91]]

 3、ndarray-数组转置与轴对换

        注意数组转置与  reshape()的区别

        数组转置的基本概念:

             数组转置是指将shape进行重置操作,原始的shape值为:(2,3,4),转置后shape的值为:(4,3,2)。可以通过调用数组的                      对象.transpose(  )  函数或者   对象.T   属性进行数组转置操作。

① 数组的转置:

import numpy as np
arr1 = np.arange(1,11,1).reshape(2,5)
1、 利用 T 属性
arr2 = arr1.T
print(arr2)
2、利用 transpose()函数 
arr3 = arr1.transpose()
print(arr3)
      

② 数组的轴对换:

import numpy as np
arr1 = np.arange(1,13,1).reshape(2,3,2)
arr2 = arr1.transpose(2,0,1)     中间不用加小()
print(arr2)
[[[ 1  3  5]
  [ 7  9 11]]

 [[ 2  4  6]
  [ 8 10 12]]]

            运行过程:

4、ndarray-数组拉伸与合并:

①数组的拉伸:np.tileArep),可以将数组A进行拉伸,沿着A的维度重复rep

例子:

import numpy as np
arr1 = np.array([[1,2,3],
                 [4,5,6]])
print(np.tile(arr1,3))        # 一个数字为 横向拉伸 3 倍
print(np.tile(arr1,(3,1)))    # 纵向 拉伸 3倍 ,横向拉伸 1倍

 ② 数组的合并:np.stack()函数 

               对于ndarray数组而言,多个数组可以执行合并操作,合并的方式有多种:

  •                Stack(arrays,axis=0):沿着新的轴加入一个维度   (   axis是坐标轴 ,stack 堆 )
  •                vstack():堆栈数组垂直顺序(行)                      
  •                hstack():堆栈数组水平顺序(列)。
  •                stack()函数内部要加 小 ()。
  • import numpy as np
    a = np.array([[1,2,3],
                [4,5,6]])
    b = np.array([[1,2,3],
                [4,5,6]])
    c = np.array([[1,2,3],
                [4,5,6]])
    d = np.array([[1,2,3],
                [4,5,6]])
    e = np.array([1,2,3])
    f = np.array([4,5,6])
    print(np.stack((e,)))   # 注意 : stack 里面要用小()括起来,默认 axis 为 0 轴。
    print(np.stack((e,),axis=1))
    print(np.stack((e,f),axis=1))

                          

5、ndarray-通用函数/常用函数:(元素级运算)

          ufunc:接受一个或多个标量值,进行快速元素级运算的函数主要包括一元函数和二元函数。

①一元 ufunc:元素级操作,调用方法: np . 函数名()。

 

 例子:

 

② 二元ufunc :(元素级操作,其中dot 不是元素级操作)

                      数组的 点积  不同于 数组 * 数组 。

6、聚合函数:

arr1 =np.random.randint(1,11,(3,4))
print(np.max(arr1))     # 求最大值
print(np.min(arr1))
print(np.mean(arr1))     # 平均值
print(arr1.mean()) # 平均值

方差:np.array(  ) 、标准差:np.std(   )

 聚合函数对 某一轴元素进行 聚合:

 7、np. where()函数(三元表达式x if condition else y效果):

                  np.where(condition,arr1,arr2)   满足条件 选择arr1,不满足 选择arr2

用法:

8、去重函数   np.unique(对象):

猜你喜欢

转载自blog.csdn.net/qq_16555103/article/details/84287384