Python数组变形(学习笔记)(下)

简介: Python数组变形(学习笔记)

6.repeat


repeat(): 复制数组中的每个指定元素。

一维数组:用整数型和列表型参考来控制元素被复制的个数

多维数组:用整数型和列表型来控制元素被复制的个数

import numpy as np
arr=np.arange(3)
print(arr.shape)


(1)标量参数


print(arr.repeat(3))   # 每个元素复制三次

b390fd7bcada48fa92b7e1efcec54280.png


(2)列表参数


print(arr)
print(arr.repeat([1,2,3]))  
# 第一个没有复制,第二个复制了两个,,依次类推
40a4f77d9df54a3685ff6ecf0c411633.png

当列表的元素少于数组元素,或者多余数组元素,都会报错,就如下图所示。

1c59bca7753c4938be480689ec2ffd5f.png

上面是一维数组的,接下来再看看二维数组中利用标量参数和轴参数:

e457289ec1ad4f29a1e377817dd7d6f1.png

print(arr.repeat(2)) # 此时二维数组变成一维的了
print(arr.repeat(2,1)) 
print(arr.repeat(2,axis=0)) # 在行上面进行复制

14f01d3eb0f74838959f13351a742969.png


再来看看二维数组中的列表参数和轴参数:d712523eab7a433dbb279b56db4b3d65.png


7.tile



关于repeat和title,二者的本质都是复制,而repeat是在元素层面进行赋值,title是在数组层面进行赋值。


(1)标量参数


print(np.tile(arr,2))
print(np.repeat(arr,2))

da931a0e19ec43c8b4b6ee9e2b57920c.png


(2)元组参数


元组参数即括号里面用相关参数进行分割。

print(np.tile(arr,(2,3)))

f6e87b14d2ec4c9eba679d211ffbbdf4.png

print(np.tile(arr,(2,3,4)))

在轴0上面复制两遍,复制3遍,复制4遍。

822c23b57151450d9905350d412ccb43.png


8.sort



排序分为:

  1. 直接排序
  2. 间接排序

直接排序sort() :在原来的数组上进行排序操作,而不重新创建一个数组


(1)一维数组排序方法


arr=np.array([9,1,5,7,2,3,8,6]) # 先创建一个无序数组
arr
print('排序之前的数组:',arr)
arr.sort()
print('排序之后的数组:',arr)

a934164db8574b6eb390ae4471d4dc41.png

arr[::-1] # 使用倒序的方法显示

659a5c85ea9345e28662b83970f9bfdb.png


(2)多维数组排序方法


先使用random随机生成一个二维数组:(每次)

import numpy as np
np.random.seed(1000)
arr=np.random.randint(40,size=(3,4))
arr

以上的方法在每次重新刷新了之后会变化数组的数字。

d8e841c9f3e242c88094353881513739.png

如果对二维数组直接使用arr.sort(),则会直接对行进行排序。

0faa28481f2d4a04b97b25181997824f.png

对列进行排序:

print('排序之前的数组:')
print(arr)
arr[:,0].sort()
print('排序之后的数组:')
print(arr)
9c046a41601d4ebb81ea4b1864be2806.png
np.sort(arr[:,2]) # 选择第三列进行排序

849c306901c2491ebb5b3d106e46c15c.png

arr.sort(axis=1) # 横着排序,原来数组改变
np.sort(arr,axis=1) # 横着排序,但原来的数组不会改变
arr.sort(axis=0) # 竖着排序,原来数组改变
np.sort(arr,axis=0) # 竖着排序,但原来的数组不会改变

1d22645fd27042599b1670719ab476d9.png


8da89ca26939426b8ae01df4830a71d2.png


(3)argsort函数


接下来看看间接排序:

间接排序:利用特定的参数进行排序,按需排序,需要使用argsort( )函数

argsort函数:返回的是数组值从小到大的索引值。

score=np.array([100,65,76,89,58])
idx=score.argsort()
idx
dec54d676ec54ea19798d86e3d12a022.png 72f7f78d93e543bbaddacdb1aa245cfa.png
arr[:,arr[0].argsort()]
#按第一行从低到高进行排序,并且对应的列也会跟着变化 
arr#由于使用的是argsort,因此原数组不会改变 

5fd4405462ef40da916cb3a7d9b90abc.png


(4)lexsort函数


numpy.lexsort() 用于对多个序列进行排序。把它想象成对电子表格进行排序,每一列代表一个序列,排序时优先照顾靠后的列。


这里举一个应用场景:小升初考试,重点班录取学生按照总成绩录取。在总成绩相同时,数学成绩高的优先录取,在总成绩和数学成绩都相同时,按照英语成绩录取…… 这里,总成绩排在电子表格的最后一列,数学成绩在倒数第二列,英语成绩在倒数第三列。

arr1=np.array(['E','B','C','A','D'])
arr2=np.array(['4','1','3','2','5'])
idx=np.lexsort((arr1,arr2))

6db4f3521e5643308be4a216ecc240b9.png


9.insert



insert 是插入,但原数组不会改变。

6211e98c3c584dd8afa8172a5829d0f8.png

arr1=np.insert(arr,1,100)
arr1 


10.delete



delete是删除,但原数组同样不会改变。

arr=np.arange(6)
np.delete(arr,1)
np.delete(arr,[1,2])

4cfca9aa6c8b4d8c9899d01efdf9584c.png


11.copy



关于copyview ,这里需要了解一下数组切片和列表切片的区别:


  1. 数组切片得到的是原数组的一个view(视图),修改切片中的内容改变原来数组
  2. 列表切片得到的是原列表的一个copy(复制),修改切片后的列表不会改变原列表
arr=np.arange(6)
arr_copy=arr.copy()
arr_copy[0]=100
arr_copy
9e6131cf82c9402da66460bd46fb0114.png

12.view



arr=np.arange(6)
arr_view=arr.view()
arr_view[0]=100
arr_view

cc0b409f7ecf401891277b46f4dee499.png

讲了以上12种数组变形,那么如何使用容器型数据的特性和数组相关函数的方法对字符串或者其他对象进行去重呢?

s='数组切片得到的是原数组的一个,修改切片中的内容会改变原来数组'

假设现在要对s进行去重:

方法一:使用set

sets=set(s)

8d8d69db7be84a29b62709999beeb072.png

方法二:使用unique

sarr=np.array(s)
np.unique(list(s))
d2ee69e2c7c34f3eb48f6b3d22b4d98b.png


相关文章
|
2月前
|
网络协议 Java Linux
PyAV学习笔记(一):PyAV简介、安装、基础操作、python获取RTSP(海康)的各种时间戳(rtp、dts、pts)
本文介绍了PyAV库,它是FFmpeg的Python绑定,提供了底层库的全部功能和控制。文章详细讲解了PyAV的安装过程,包括在Windows、Linux和ARM平台上的安装步骤,以及安装中可能遇到的错误和解决方法。此外,还解释了时间戳的概念,包括RTP、NTP、PTS和DTS,并提供了Python代码示例,展示如何获取RTSP流中的各种时间戳。最后,文章还提供了一些附录,包括Python通过NTP同步获取时间的方法和使用PyAV访问网络视频流的技巧。
483 4
PyAV学习笔记(一):PyAV简介、安装、基础操作、python获取RTSP(海康)的各种时间戳(rtp、dts、pts)
|
2月前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
177 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
2月前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
190 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
2月前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
73 1
|
2月前
|
Ubuntu Linux Python
Ubuntu学习笔记(六):ubuntu切换Anaconda和系统自带Python
本文介绍了在Ubuntu系统中切换Anaconda和系统自带Python的方法。方法1涉及编辑~/.bashrc和/etc/profile文件,更新Anaconda的路径。方法2提供了详细的步骤指导,帮助用户在Anaconda和系统自带Python之间进行切换。
124 1
|
2月前
|
机器学习/深度学习 并行计算 大数据
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧2
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧
101 10
|
2月前
|
索引 Python
Python学习笔记编程小哥令狐~持续更新、、、(上)
Python学习笔记编程小哥令狐~持续更新、、、(上)
54 2
|
2月前
|
存储 Python
Python学习笔记编程小哥令狐~持续更新、、、 (下)
Python学习笔记编程小哥令狐~持续更新、、、 (下)
38 1
|
2月前
|
存储 Python
【免费分享编程笔记】Python学习笔记(二)
【免费分享编程笔记】Python学习笔记(二)
48 0
【免费分享编程笔记】Python学习笔记(二)
|
2月前
|
Java 编译器 Go
Python学习笔记--- day01计算机基础和环境搭建(一)
Python学习笔记--- day01计算机基础和环境搭建(一)
47 2