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


相关文章
|
12天前
|
BI 测试技术 索引
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)-1
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)
|
8天前
|
Python
NumPy 是 Python 中的一个重要的科学计算包,其核心是一个强大的 N 维数组对象 Ndarray
【6月更文挑战第18天】NumPy的Ndarray是科学计算的核心,具有ndim(维度数)、shape(各维度大小)、size(元素总数)和dtype(数据类型)属性。方法包括T(转置)、ravel()(扁平化)、reshape()(改变形状)、astype()(转换数据类型)、sum()(求和)及mean()(计算平均值)。更多属性和方法如min/max等可在官方文档中探索。
30 5
|
8天前
|
Python
NumPy 是 Python 的一个强大的科学计算库,它允许你创建各种类型的数组
【6月更文挑战第18天】**NumPy**是Python的科学计算库,用于创建和操作多维数组。常用数组生成方法包括:`np.array()`从列表转换为数组;`np.zeros()`生成全零矩阵;`np.ones()`创建全一矩阵;`np.linspace()`产生等差序列;`np.arange()`创建等差数列;以及`np.eye()`生成对角线为1的二维数组。更多方法可查阅NumPy官方文档。
20 2
|
8天前
|
Python
GitHub爆赞!终于有大佬把《Python学习手册》学习笔记分享出来了
这份笔记的目标是为了给出一份比较精炼,但是又要浅显易懂的Python教程。《Python学习手册》中文第四版虽然比较简单,但是措辞比较罗嗦,而且一个语法点往往散落在多个章节,不方便读者总结。 我在做笔记时,将一个知识点的内容都统筹在一个章节里面,因此提炼性大大提高。而且还有《Python学习手册》中文第四版的翻译在某些章节(可能难度较大?)措辞可能前后矛盾。当知识点提炼之后就能够很快的找到一些难以理解的概念的上下文,方便吃透这些难点。
GitHub爆赞!终于有大佬把《Python学习手册》学习笔记分享出来了
这份笔记的目标是为了给出一份比较精炼,但是又要浅显易懂的Python教程。《Python学习手册》中文第四版虽然比较简单,但是措辞比较罗嗦,而且一个语法点往往散落在多个章节,不方便读者总结。 我在做笔记时,将一个知识点的内容都统筹在一个章节里面,因此提炼性大大提高。而且还有《Python学习手册》中文第四版的翻译在某些章节(可能难度较大?)措辞可能前后矛盾。当知识点提炼之后就能够很快的找到一些难以理解的概念的上下文,方便吃透这些难点。
|
16天前
|
存储 SQL 算法
LeetCode第53题:最大子数组和【python 5种算法】
LeetCode第53题:最大子数组和【python 5种算法】
|
20天前
|
算法 搜索推荐 Java
【经典算法】LeetCode 215. 数组中的第K个最大元素(Java/C/Python3实现含注释说明,Medium)
【经典算法】LeetCode 215. 数组中的第K个最大元素(Java/C/Python3实现含注释说明,Medium)
10 3
|
20天前
|
存储 算法 Java
【经典算法】 leetcode88.合并排序的数组(Java/C/Python3实现含注释说明,Easy)
【经典算法】 leetcode88.合并排序的数组(Java/C/Python3实现含注释说明,Easy)
12 1
|
20天前
|
存储 JavaScript 前端开发
【经典算法】LeetCode350:两个数组的交集 II(Java/C/Python3/JavaScript实现含注释说明,Easy)
【经典算法】LeetCode350:两个数组的交集 II(Java/C/Python3/JavaScript实现含注释说明,Easy)
11 1
|
6天前
|
人工智能 测试技术 Python
Python数组类+AI插件
Python数组类+AI插件