Numpy进阶

目录

 

切片与索引

整数索引

布尔索引

数组广播

数组翻转

数组链接

数组分割

数组操作

字符串操作


  • 切片与索引

1.slice切片

# slice切片
a = np.arange(10)
print(a)

# slice(start, stop[, step])
s = slice(2, 10, 2)
print(a[s])
[0 1 2 3 4 5 6 7 8 9]
[2 4 6 8]

2.直接切片

# 直接切片
b = a[2:10:2]
print(b)
[2 4 6 8]

3.对单个元素进行切片

# 对单个元素进行切片
print(a[5])
5

4.从开始进行切片

# 从开始进行切片
c = a[5:]
print(c)
[2 3 4 5 6 7 8 9]

5.指定开始和结束位置进行切片

# 指定开始和结束位置进行切片
d = a[4:8]
print(d)
[4 5 6 7]

 

  • 整数索引

x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(x)
[[1 2 3]
 [4 5 6]
 [7 8 9]]

1.取出指定位置的元素

# 取出(0,0),(1,1),(2,0)位置的元素
y = x[[0, 1, 2], [0, 1, 0]]
print(y)
[1 5 7]

2.取出四个角的元素

# 取出四个角的元素
x = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]])
print(x)

rows = np.array([[0, 0], [3, 3]])
cols = np.array([[0, 3], [0, 3]])
y = x[rows, cols]
print(y)
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]
 [13 14 15 16]]
[[ 1  4]
 [13 16]]

 

  • 布尔索引

x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(x)
[[1 2 3]
 [4 5 6]
 [7 8 9]]

1.取出大于5的元素

# 取出大于5的元素
y = x[x>5]
print(y)
[6 7 8 9]

2.取出等于5的元素

# 取出等于5的元素
print(x[x==5])
[5]

 

  • 数组广播

1.同维矩阵操作

# 同维矩阵操作
a = np.array([1, 2, 3, 4, 5])
b = np.array([10, 20, 30, 40, 50])

# 相加
print(a+b)

# 相乘
print(a*b)

# 相减
print(b-a)
[11 22 33 44 55]
[ 10  40  90 160 250]
[ 9 18 27 36 45]

2.不同维度矩阵操作,需要广播

# 不同维度矩阵操作,需要广播
a = np.array([[1, 1, 1], [10, 10 ,10], [20, 20, 20]])
b = np.array([1, 2, 3])
print(a)
print(b)

print(a+b)
print(a-b)
[[ 1  1  1]
 [10 10 10]
 [20 20 20]]
[1 2 3]
[[ 2  3  4]
 [11 12 13]
 [21 22 23]]
[[ 0 -1 -2]
 [ 9  8  7]
 [19 18 17]]

 

  • 数组翻转

1.numpy.reshape()

# reshape
a = np.arange(10)
print("原始数组:\n", a)

b = a.reshape(2, 5)
print("reshape后的数组:\n", b)
原始数组:
 [0 1 2 3 4 5 6 7 8 9]
reshape后的数组:
 [[0 1 2 3 4]
 [5 6 7 8 9]]

2.numpy.ndarray.flat()

# ndarray.flat
a = np.arange(10).reshape(2, 5)
print("数组a:\n", a)

print("调用flat:\n", a.flat[:])
print(a.flat[6])
数组a:
 [[0 1 2 3 4]
 [5 6 7 8 9]]
调用flat:
 [0 1 2 3 4 5 6 7 8 9]
6

3.numpy.ndarray.flatten()

# ndarray.flatten
print("数组a:\n", a)

print("调用flatten:\n", a.flatten())
数组a:
 [[0 1 2 3 4]
 [5 6 7 8 9]]
调用flatten:
 [0 1 2 3 4 5 6 7 8 9]

4.numpy.ndarray.T

# ndarray.T
print("数组a:\n", a)

print("调用T:\n", a.T)
数组a:
 [[0 1 2 3 4]
 [5 6 7 8 9]]
调用T:
 [[0 5]
 [1 6]
 [2 7]
 [3 8]
 [4 9]]

 

  • 数组链接

1.numpy.concatenate()

# concatenate
a = np.arange(6).reshape(2, 3)
print("数组a:\n", a)
b = np.array([[7, 8, 9], [10, 11, 12]])
print("数组b:\n", b)

# 沿着0轴进行链接
print("沿着0轴进行链接:\n", np.concatenate((a, b)))

# 沿着1轴进行链接
print("沿着1轴进行链接:\n", np.concatenate((a, b), axis=1))
数组a:
 [[0 1 2]
 [3 4 5]]
数组b:
 [[ 7  8  9]
 [10 11 12]]
沿着0轴进行链接:
 [[ 0  1  2]
 [ 3  4  5]
 [ 7  8  9]
 [10 11 12]]
沿着0轴进行链接:
 [[ 0  1  2  7  8  9]
 [ 3  4  5 10 11 12]]

2.numpy.stack()

# stack
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([[7, 8, 9], [10, 11, 12]])
print("数组a:\n", a)
print("数组b:\n", b)

# 沿着0轴堆叠两个矩阵
print("沿着0轴堆叠两个矩阵:\n", np.stack((a, b), 0))

# 沿着1轴堆叠两个矩阵
print("沿着1轴堆叠两个矩阵:\n", np.stack((a, b), 1))
数组a:
 [[1 2 3]
 [4 5 6]]
数组b:
 [[ 7  8  9]
 [10 11 12]]
沿着0轴堆叠两个矩阵:
 [[[ 1  2  3]
  [ 4  5  6]]

 [[ 7  8  9]
  [10 11 12]]]
沿着1轴堆叠两个矩阵:
 [[[ 1  2  3]
  [ 7  8  9]]

 [[ 4  5  6]
  [10 11 12]]]

3.numpy.hstack() 水平堆叠/numpy.vstack() 竖直堆叠

# hstack 水平方向
# vstack 竖直方向
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
print("数组a:\n", a)
print("数组b:\n", b)

# 水平堆叠
print("水平堆叠:\n", np.hstack((a, b)))

# 竖直堆叠
print("竖直堆叠:\n", np.vstack((a, b)))
数组a:
 [[1 2]
 [3 4]]
数组b:
 [[5 6]
 [7 8]]
水平堆叠:
 [[1 2 5 6]
 [3 4 7 8]]
竖直堆叠:
 [[1 2]
 [3 4]
 [5 6]
 [7 8]]

 

  • 数组分割

1.numpy.split()

# split
a = np.arange(12)
print("数组a:\n", a)

# 将数组a分割成大小相等的三个子数组
b = np.split(a, 3)
print("数组b:\n", b)

# 在数组中明确位置进行分割
c = np.split(a, [4, 7])
print("明确位置分割:\n", c)
数组a:
 [ 0  1  2  3  4  5  6  7  8  9 10 11]
数组b:
 [array([0, 1, 2, 3]), array([4, 5, 6, 7]), array([ 8,  9, 10, 11])]
明确位置分割:
 [array([0, 1, 2, 3]), array([4, 5, 6]), array([ 7,  8,  9, 10, 11])]

2.numpy.hsplit() 水平分割/numpy.vsplit() 竖直分割

# hsplit 水平方向
# vsplit 竖直方向
a = np.arange(16).reshape(4, 4)
print("数组a:\n", a)

# 水平分割
b = np.hsplit(a, 2)
print("水平分割:\n", b)

# 竖直分割
c = np.vsplit(a, 2)
print("竖直分割:\n", c)
数组a:
 [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
水平分割:
 [array([[ 0,  1],
       [ 4,  5],
       [ 8,  9],
       [12, 13]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11],
       [14, 15]])]
竖直分割:
 [array([[0, 1, 2, 3],
       [4, 5, 6, 7]]), array([[ 8,  9, 10, 11],
       [12, 13, 14, 15]])]

 

  • 数组操作

1. numpy.resize()

# resize
a = np.array([[1, 2, 3], [4, 5, 6]])
print("数组a:\n", a, a.shape)

b = np.resize(a, (3, 2))
print("resize数组b:\n", b)
数组a:
 [[1 2 3]
 [4 5 6]] (2, 3)
resize数组b:
 [[1 2]
 [3 4]
 [5 6]]

2.numpy.append()

# append
a = np.arange(10).reshape(2, 5)
print("数组a:\n", a)

# 往数组中添加元素
print("直接添加:\n", np.append(a, [10, 11, 12]))

# 沿着0轴进行添加
print("沿0轴添加:\n", np.append(a, [[10, 11, 12, 13, 14]], axis=0))

# 沿着1轴进行添加
print("沿1轴添加:\n", np.append(a, [[6, 6, 6], [7, 7, 7]], axis=1))
数组a:
 [[0 1 2 3 4]
 [5 6 7 8 9]]
直接添加:
 [ 0  1  2  3  4  5  6  7  8  9 10 11 12]
沿0轴添加:
 [[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]
沿1轴添加:
 [[0 1 2 3 4 6 6 6]
 [5 6 7 8 9 7 7 7]]

3.numpy.insert()

a = np.array([[1, 2], [3, 4], [5, 6]])
print("数组a:\n", a)

# 未传入axis参数,插入时会展开为一维数组
print("未传入axis参数:\n", np.insert(a, 6, [8, 9]))

# 沿着0轴进行添加
print("沿着0轴添加:\n", np.insert(a, 1, [8, 9], axis=0))

# 沿着1轴进行添加
print("沿着1轴添加:\n", np.insert(a, 1, [8], axis=1))
数组a:
 [[1 2]
 [3 4]
 [5 6]]
未传入axis参数:
 [1 2 3 4 5 6 8 9]
沿着0轴添加:
 [[1 2]
 [8 9]
 [3 4]
 [5 6]]
沿着1轴添加:
 [[1 8 2]
 [3 8 4]
 [5 8 6]]

4.numpy.delete()

# delete
a = np.arange(12).reshape(3, 4)
print("数组a:\n", a)

# 未传入axis参数,删除后会展开为一维数组
print("未传入axis参数:\n", np.delete(a, 6))

# 按行删除
print("按行删除:\n", np.delete(a, 2, axis=0))

# 按列删除
print("按列删除:\n", np.delete(a, 0, axis=1))
数组a:
 [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
未传入axis参数:
 [ 0  1  2  3  4  5  7  8  9 10 11]
按行删除:
 [[0 1 2 3]
 [4 5 6 7]]
按列删除:
 [[ 1  2  3]
 [ 5  6  7]
 [ 9 10 11]]

5.numpy.unique()

# unique
a = np.array([1, 2, 3, 4, 5, 5, 5, 5, 6, 6, 6, 7, 8, 9, 9, 9, 9])
print("数组a:\n", a)

# unique剔除重复元素
print("删除重复元素:\n", np.unique(a))
数组a:
 [1 2 3 4 5 5 5 5 6 6 6 7 8 9 9 9 9]
删除重复元素:
 [1 2 3 4 5 6 7 8 9]

 

  • 字符串操作

1.add() 返回两个str或Unicode数组的逐个字符串连接

# add 字符串连接
a = 'hello'
b = 'han'
c = np.char.add(a, b)
print(c)
hellohan
a = ['hello', 'hi']
b = ['han', 'yukio']
c = np.char.add(a, b)
print(c)
['hellohan' 'hiyukio']

2.multiply() 返回按元素多重连接后的字符串

# multiply 返回按元素多重连接后的字符串
a = 'hello'
b = np.char.multiply(a, 5)
print(b)
hellohellohellohellohello

3.center() 返回给定字符串的副本,其中元素位于特定字符串的中央

# center 返回给定字符串的副本,其中元素位于特定字符串的中央
a = 'hello'
b = np.char.center(a, 30, fillchar='*')
print(b)
************hello*************

4.capitalize() 返回给定字符串的副本,其中只有第一个字符串大写

# capitalize 返回给定字符串的副本,其中只有第一个字符串大写
a = 'hello han'
b = np.char.capitalize(a)
print(b)
Hello han

5.title() 返回字符串或Unicode的按元素标题转换版本

# title 返回字符串或Unicode的按元素标题转换版本
a = 'hello han'
b = np.char.title(a)
print(b)
Hello Han

6.lower() 返回一个数组,其元素转换为小写

# lower 返回一个数组,其元素转换为小写
a = 'HELLO HAN'
b = np.char.lower(a)
print(b)
hello han

7.upper() 返回一个数组,其元素转换为大写

# upper 返回一个数组,其元素转换为大写
a = 'hello han'
b = np.char.upper(a)
print(b)
HELLO HAN

8.split() 返回字符串中的单词列表,并使用分隔符来分割

# split 返回字符串中的单词列表,并使用分隔符来分割
a = 'hello how are you'
b = np.char.split(a)
print(b)
['hello', 'how', 'are', 'you']
a = 'hello$how$are$you'
b = np.char.split(a, '$')
print(b)
['hello', 'how', 'are', 'you']

9.splitlines() 返回元素中的行列表,以换行符分割

# splitlines 返回元素中的行列表,以换行符分割
a = 'hello\nhow are you'
b = np.char.splitlines(a)
print(b)
['hello', 'how are you']

10.strip() 返回数组副本,其中元素移除了开头或者结尾处的特定字符

# strip 返回数组副本,其中元素移除了开头或者结尾处的特定字符
a = '   hello han    '
b = np.char.strip(a)
print(b)
hello han
a = 'ahello hana'
b = np.char.strip(a, 'a')
print(b)
hello han

11.join() 返回一个字符串,它是序列中字符串的连接

# join 返回一个字符串,它是序列中字符串的连接
a = 'hello'
b = np.char.join('-', a)
print(b)
h-e-l-l-o

12.replace() 返回字符串的副本,其中所有子字符串的出现位置都被新字符串取代

# replace 返回字符串的副本,其中所有子字符串的出现位置都被新字符串取代
a = 'he is a good boy'
b = np.char.replace(a, 'is', 'was')
print(b)
he was a good boy

13.encode() 按元素调用str.encode

# encode
a = '你好'
b = np.char.encode(a, 'gbk')
print(a)
print(b)
你好
b'\xc4\xe3\xba\xc3'

14.decode() 按元素调用str.decode

# decode
c = np.char.decode(b, 'gbk')
print(c)
你好
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值