整数数组
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) #4行3列
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或为空或相等,则可以进行运算