numpy数组切片与索引


在这里插入图片描述

整数数组


import numpy as np
a=np.arange(10)

b=a[2:8:2]
b
out :array([2, 4, 6])
#索引+1=平常说的第几个元素

二维数组索引

c=np.arange(20).reshape(4,5)
c
out:
array([[ 0,  1,  2,  3,  4],
         [ 5,  6,  7,  8,  9],
         [10, 11, 12, 13, 14],
         [15, 16, 17, 18, 19]])
c.ndim
out:
2
c[2]
out:
array([10, 11, 12, 13, 14])
c[2][2]
out:
12
c[...][2]
out:
array([10, 11, 12, 13, 14])
c[...][2:]
array([[10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19]])
       #意味先取出所有行再取第三行
#行的位置用...先取出所有行
#c[...][2]意味先取出所有行再取第三行
c[2:]
array([[10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19]])


b=np.array([
    [0,1,2],
    [3,4,5],
    [6,7,8],
    [9,10,11]
])
a=b[[0,0,3,3],[0,2,0,2]]
#[0,0,3,3]代表行索引
#[0,2,0,2]代表列索引
#对应[0,0],[0,2],[3,0],[3,2]
a
array([ 0,  2,  9, 11])

r=np.array([[0,0],[3,3]]).reshape(4)
l=np.array([[0,2],[0,2]]).reshape(4)
r
​array([0, 0, 3, 3])
s=b[r,l].reshape((2,2))
s
out:
array([[ 0,  2],
       [ 9, 11]])
#逗号前表示行索引,逗号后表示列索引
#b[r,l]=b[[0,0,3,3],[0,2,0,2]]
#逗号前表示行索引,逗号后表示列索引
b=np.array([
    [0,1,2],
    [3,4,5],
    [6,7,8],
    [9,10,11]
])
a=b[1:3,1:3]#  等同于a=b[[1,2],[1,2]]
print(a)
[[4 5]
 [7 8]]
#创建8*8数组,并全部赋值为0
d=np.arange(64).reshape(8,8)
​
d.flat=0
print(d)
[[0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0]]

布尔数组 输出的结果可以经过布尔运算

a=np.arange(12).reshape(3,4)
a[a>6]   #输出大于6的数
​
array([ 7,  8,  9, 10, 11])

a[a%2==1] #输出奇数
​a

array([[ 0, -1,  2, -1],
       [ 4, -1,  6, -1],
       [ 8, -1, 10, -1]])
a[a%2==1]=-1 #输出奇数,修改不可逆,除非建副本修改
a
array([[ 0, -1,  2, -1],
       [ 4, -1,  6, -1],
       [ 8, -1, 10, -1]])

a=np.arange(12)
a[(a>2)&(a<10)]   # 要加括号,&的用法

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


True False的形式 表示需要和不需要的数据

a=np.arange(9).reshape(3,3)
a
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

a[[0,2],[0,2]]
array([0, 8])

广播机制 (满足运算条件,小的数组会在行或列重复以和大的数组相等)

a=np.arange(12).reshape(4,3)  #43列
b=np.array([1,2,3]) #一行三列
a
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]])
b
array([1, 2, 3])
print(a+b)
[[ 1  3  5]
 [ 4  6  8]
 [ 7  9 11]
 [10 12 14]]
print(a*b)
[[ 0  2  6]
 [ 3  8 15]
 [ 6 14 24]
 [ 9 20 33]]

运算条件

将两个数组维度数值右对齐,如果数值有1或为空或相等,则可以进行运算

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值