Numpy(二) 元素与数组的操作

Numpy(二) 元素与数组的操作

一、元素的索引访问

1.一维数组索引访问

①Numpy一维数组索引访问与python内置序列类型索引访问一样,都使用中括号+下标([index])
②正值索引/负值索引
正值索引:0  1  2  3  4  5
a数组:  【1,2,3,4,5,6】
复制索引:0  -5 -4 -3 -2 -1
*正值索引:第一个元素为a[0]其余依次排序,第n个元素为a[n-1] 负值索引:第一个元素依旧为a[0]其余元素从后往前依次减小1,最后一个元素为a[-1],第二个元素为a[-(n-1)]

2.一维数组索引访问的操作、

import numpy as np
a=np.array([1,2,3,4,5,6])
print('正值索引第五个元素:',a[4])
print('负值索引倒数第二个元素:',a[-2])

正值索引第五个元素: 5
负值索引倒数第二个元素: 5

2.二维数组的索引访问

A.两种语法规则
①表达式1:np.array[所在0轴索引] [所在1轴索引] 表达式2:np.array[所在0轴索引,所在1轴索引]
image-20231011203758572
*0轴为行,1轴为列
B.操作
①第一种表示方法查询6号元素
import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
print(a)
print('正值索引为:',a[1][2])
'6号元素正值索引为[1][2]'
print('负值索引为:',a[-2][-1])
'6号元素负值索引为:[-2][-1]'

正值索引为: 6
负值索引为: 6
②第二种索引方法索引6号元素
import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
print(a)
print('正值索引:',a[1,2])
print('负值索引:',a[-2,-1])

[[1 2 3]
 [4 5 6]
 [7 8 9]]
正值索引: 6
负值索引: 6

二、切片访问

1.一维数组的切片访问

①Numpy一维数组的切片访问与python内置序列切片操作方法一样。切片运算有两种形式:
1.[start:end]————start是开始索引的位置,end是结束索引前一个元素的位置(不包含end位置上的元素),由开始到结束直接切片下来。
2.[start:end:step]——start是开始索引的位置,end是结束索引前一个元素的位置(不包含end位置上的元素),step为步长,不尝试切片是获取元素的间隙。步长可以选择正整数也可以选择负整数。
②两种方式的切片访问
A.第一种方式选取第3位至第6位的元素
import numpy as np
a=np.array([1,2,3,4,5,6,7,8,9,10])
print('选取的第3号到第六号元素为:',a[3:6])

选取的第3号到第六号元素为: [4 5 6]————下角标为6号的元素为7,但是不包含end位置的元素故最后一位为a[end-1](6)
B.第二种方式选取2到8位的元素,步长为2
import numpy as np
a=np.array([1,2,3,4,5,6,7,8,9,10])
print('选取2到8位的元素,步长为2的元素为::',a[2:8:2])

选取2到8位的元素,步长为2的元素为:: [3 5 7]

2.二维数组的切片访问

①二维数组的切片访问主要是以轴进行切片访问,先0轴后1轴。
②语法规则:
np.array[所在0轴上的切片,所在1轴上的切片]
③实例
给出5*5的数组
    0  1  2  3  4
 0[ 1  2  3  4  5]
 1[ 6  7  8  9 10]
 2[11 12 13 14 15]
 3[16 17 18 19 20]
 4[21 22 23 24 25]
A.找出[7,8,9],[12,13,14],[17,18,19],[22,23,24]
tips:0轴上切片[1:5],1轴上切片[1:4]
import numpy as np
a=np.array([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20],[21,22,23,24,25]])
print(a[1:5,1:4])

[[ 7  8  9]
 [12 13 14]
 [17 18 19]
 [22 23 24]]
B.找[13,14]
tips:0轴上固定值2,1轴上切片[2:4]
import numpy as np
a=np.array([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20],[21,22,23,24,25]])
print(a[2,2:4])
print(a)
[13 14]

三、布尔索引

1.为了从数组中过滤我们想要的元素,可以使用布尔索引。

2.一维数组的布尔索引

①创建一个一维数组[1,2,3,4,5,6]
②创建一维布尔数组[True,True,Flase,True,Flase,True]
③对比,得出数据
import numpy as np
a=np.array([1,2,3,4,5,6])
b=np.array([True,True,False,True,False,True])
print(a[b])

3.二维数组的布尔索引

①创建一个二维数组
②创建二维布尔数组
③对比,得出数据
import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
b=np.array([[True,False,True],[False,False,False],[True,False,False]])
print(a[b])

[1 3 7]
*布尔数组必须与索引数组的形状相同!

四、数组的操作

1.连接数组

1.concatenate函数:沿指定轴连接多个数组
[1,2,3]                    [1,2,3]
[4,5,6]+[10,11,12]———————— [4,5,6]
[7,8,9]                    [7,8,9]
                           [10,11,12]
                           
                           

[1,2,3] [10         [1,2,3,10]
[4,5,6]+ 11———————— [4,5,6,11]
[7,8,9]  12]        [7,8,9,12]                                  
向下直接拼接
import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
b=np.array([[10,11,12]])
ab=np.concatenate((a,b))
print(ab)

[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]
向右拼接(将原来一维数组转置后拼接)
import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
b=np.array([[10,11,12]]).T//转置
ab=np.concatenate((a,b),axis=1)
print(ab)

[[ 1  2  3 10]
 [ 4  5  6 11]
 [ 7  8  9 12]]

2.hstack函数

hstack函数沿水平堆叠多个数组,相当于concatenate函数在axis=1的情况
import numpy as np
a=np.array([[1,2],[3,4]])
print(a)
b=np.array([[5,6]]).T
c=np.concatenate([a,b],axis=1)
print(c)
d=np.hstack([a,b])
print(d)

[[1 2]
 [3 4]]
[[1 2 5]
 [3 4 6]]
[[1 2 5]
 [3 4 6]]

3.vstack函数

vstack函数言垂直堆叠多个数组,相当于concatenate函数在axis=0的情况。
import numpy as np
a=np.array([[1,2],[3,4]])
print(a)
b=np.array([[5,6]])
c=np.concatenate([a,b],axis=0)
print(c)
d=np.vstack([a,b])
print(d)

[[1 2]
 [3 4]]
[[1 2]
 [3 4]
 [5 6]]
[[1 2]
 [3 4]
 [5 6]]

2.splik——切割数组

①语法:np.splik(ary,indices_or_sections,axis)
属性 标注
ary 指定所属数组
indices_or_sections 对应的数组或者整数,如果整数就用该数平均分割数组,如果数组就按照指定轴做切片处理
axis 轴的分割方向
②基本操作
A.平均等分数组:
等分一维数组:
import numpy as np
a=np.array([1,2,3,4,5,6,7,8,9])
print(np.split(a,3))

[array([1, 2, 3]), array([4, 5, 6]), array([7, 8, 9])]
按列等分二维数组

1.修改axis参数

import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
b=np.split(a,3,axis=1)
print(b)

[array([[1],
       [4],
       [7]]), array([[2],
       [5],
       [8]]), array([[3],
       [6],
       [9]])]

2.使用hsplit()

import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
b=np.hsplit(a,3)
print(b)

[array([[1],
       [4],
       [7]]), array([[2],
       [5],
       [8]]), array([[3],
       [6],
       [9]])]
按行等分二维数组

1.修改axis参数

import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
b=np.split(a,3,axis=0)
print(b)

[array([[1, 2, 3]]), array([[4, 5, 6]]), array([[7, 8, 9]])]

2.使用vsplit()

import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
b=np.vsplit(a,3)
print(b)

[array([[1, 2, 3]]), array([[4, 5, 6]]), array([[7, 8, 9]])]
B.用一个数组分割整体数组
import numpy as np
a=np.array([1,2,3,4,5,6,7,8,9])
b=np.split(a,[4,6])
print(b)

[array([1, 2, 3, 4]), array([5, 6]), array([7, 8, 9])]

五、数组的算术运算

1.numpy数组可以使用python里面的加减乘除乘方进行数组内部元素的算术运算。

2.数组的加法运算

①实例
a=[1,2,3,4] b=[2,3,4,5] a+b=[3,5,7,9]

a=[1,2]        b=[2,3]           a+b=[3,5]
  [3,4]          [4,5]               [7,9]
②代码操作
一维数组的加法运算
import numpy as np
a=np.array([1,2,3,4,5])
b=np.array([2,4,6,8,10])
print(a+b)

[ 3  6  9 12 15]
二维数组的加法运算
import numpy as np
a=np.array([[1,2,3],[6,7,8]])
b=np.random.rand(2,3)
print('b的数组为:',b)
print(a+b)

b的数组为: [[0.39952873 0.62792605 0.63734903]
 [0.80093729 0.51350318 0.33915585]]
[[1.39952873 2.62792605 3.63734903]
[6.80093729 7.51350318 8.33915585]]
数组内每个元素加固定值
import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
b=a+10
print(b)

[[11 12 13]
 [14 15 16]
 [17 18 19]]

3.数组里面减法运算(同加法)

4.数组里面的乘法运算

①实例
a=[1,2,3]    b=[1,3,5]      a*b=[1,6,15] 
  [4,5,6]      [2,4,6]          [8,20,36]
  [7,8,9]      [3,4,5]          [21,32,45]

②代码操作
一维数组的乘法运算
import numpy as np
a=np.array([1,2,3,4])
b=np.array([2,3,4,5])
print(a*b)

[ 2  6 12 20]
每个元素同乘一个数
import numpy as np
a=np.array([1,2,3,4])
b=np.array([2,3,4,5])
print(a*3)
print(b*5)

[ 3  6  9 12]
[10 15 20 25]
二维数组乘法运算
import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
b=np.array([[1,2,3],[2,4,6],[3,6,9]])
print(a*b)

[[ 1  4  9]
 [ 8 20 36]
 [21 48 81]]

5.数组里面的除法运算(同乘法)

6.矩阵里面的幂运算

import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
print(a**2)

[[ 1  4  9]
 [16 25 36]
 [49 64 81]]

*这里面的加、减、乘、除、乘方运算都为在数组里面元素的计算,乘除法不是矩阵相乘。

六、数组的广播

1.数组广播的概念:不同形状的数组或者标量计算时发生广播。

2.标量广播:一个数组与一个标量进行运算,这个标量会构成一个数组与原来数组的形状相同。

eg;

a=[1,2,3,4]  a+10=[1,2,3,4]+[10,10,10,10]=[11,12,13,14]
a*10=[1,2,3,4]*[10,10,10,10]=[10,20,30,40]


eg:
a=[1,2]     a+10= [1,2]  +  [10,10]  = [11,12]
  [3,4]           [3,4]     [10,10]    [13,14]

3.数组广播

①数组广播:当数组在进行计算是,计算的两个数组维度不相等就会进行数组广播。
②数组广播的规则

Numpy(二) 元素与数组的操作_第1张图片

A. 一维数组与高维数组运算,一维数组通过广播的形式将一维数组补齐后进行运算。这里只能是一维数组进行广播

你可能感兴趣的:(numpy)