Python刷题系列(2)_NumPy数组(上)

简介: 编写一个 NumPy 程序,将数值列表转换为一维 NumPy 数组。

NumPy 数组对象



1、将数值列表转换为一维NumPy数组


编写一个 NumPy 程序,将数值列表转换为一维 NumPy 数组。


预期输出:

原始列表:[12.23, 13.32, 100, 36.32]

一维NumPy数组:[ 12.23 13.32 100. 36.32]

import numpy as np
l = [12.23, 13.32, 100, 36.32]
print("Original List:",l)
a = np.array(l)
print("One-dimensional NumPy array: ",a)

a48157dd0b4c4a2b91c10117e9b03a5b.png


numpy.array:创建一个数组。

【1】语法:

numpy.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)

【2】参数:

image.png


2、编写一个 NumPy 程序来反转数组


编写一个 NumPy 程序来反转数组(第一个元素变为最后一个)。

原始数组:

[12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37]

反向数组:

[37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12]

241ddf9f3e3748708eae3cce5f2ab2d7.png

import numpy as np
import numpy as np
x = np.arange(12, 38)
print("Original array:")
print(x)
print("Reverse array:")
x = x[::-1]
print(x)
'''
Original array:                                                         
[12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
 36                                                                     
 37]                                                                    
Reverse array:                                                          
[37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14
 13                                                                     
 12] 
'''


3、转换为浮点型的数组


编写一个NumPy程序将数组转换为浮点类型。

方法一:使用asfarray函数

0b4cf3b36d2e4b24815b9df1fbce22d5.png

import numpy as np
import numpy as np
a = [1, 2, 3, 4]
print("Original array")
print(a)
x = np.asfarray(a)
print("Array converted to a float type:")
print(x)
'''
Original array                                                          
[1, 2, 3, 4]                                                            
Array converted to a float type:                                        
[ 1.  2.  3.  4.]
'' '

【1】asfarrary:相当于as float array,将数组转换为浮点类型。不仅可以对多维数组做数值处理,还可以对列表做去转移符处理。

方法二:使用astype函数

import numpy as np
x = np.array([[2, 4, 6], [6, 8, 10]], np.int32)
print(x)
print(x.dtype)
y = x.astype(float)
print(y)
print(y.dtype)
'''
[[ 2  4  6]
 [ 6  8 10]]
int32
[[ 2.  4.  6.]
 [ 6.  8. 10.]]
float64
'''


4、将列表和元组转换为数组


编写一个NumPy程序将列表和元组转换为数组。

deee61f5e29541fc99bbce1ad846026d.png

注:这里可以使用np.array或者np.asarray

import numpy as np
my_list = [1, 2, 3, 4, 5, 6, 7, 8]
print("List to array: ")
print(np.array(my_list))
my_tuple = ([8, 4, 6], [1, 2, 3])
print("Tuple to array: ")
print(np.array(my_tuple))
'''
List to array: 
[1 2 3 4 5 6 7 8]
Tuple to array: 
[[8 4 6]
 [1 2 3]]
'''


5、将值追加到数组的末尾


编写一个 NumPy 程序以将值追加到数组的末尾。

import numpy as np
x = [10, 20, 30]
print("Original array:")
print(x)
x = np.append(x, [[40, 50, 60], [70, 80, 90]])
print("After append values to the end of the array:")
print(x)
'''
Original array:
[10, 20, 30]
After append values to the end of the array:
[10 20 30 40 50 60 70 80 90]
'''

e13bca37779145feb496278c831cec2d.png


【1】np.append(arr, values, axis=None) 用法:


作用:

为原始array添加一些values


参数:

arr:需要被添加values的数组

values:添加到数组arr中的值(array_like,类数组)

axis:可选参数,如果axis没有给出,那么arr,values都将先展平成一维数组。注:如果axis被指定了,那么arr和values需要有相同的shape,否则报错:ValueError: arrays must have same number of dimensions

补充对axis的理解


axis的最大值为数组arr的维数-1,如arr维数等于1,axis最大值为0;arr维数等于2,axis最大值为1,以此类推。

当arr的维数为2(理解为单通道图),axis=0表示沿着行方向添加values;axis=1表示沿着列方向添加values

当arr的维数为3(理解为多通道图),axis=0,axis=1时同上;axis=2表示沿着深度方向添加values


返回:

添加了values的新数组


【2】这里由于使用的append中参数axis=None,因此会将添加的二维数组展开成一维的。


6、在现有数组周围添加边框


编写一个NumPy程序,在现有数组周围添加一个边框(用0填充)。

f7d5f35f53374b618459f82d318295f0.png

import numpy as np
x = np.ones((3,3))
print("Original array:")
print(x)
print("0 on the border and 1 inside in the array")
x = np.pad(x, pad_width=1, mode='constant', constant_values=0)
print(x)
'''
Original array:
[[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]
0 on the border and 1 inside in the array
[[0. 0. 0. 0. 0.]
 [0. 1. 1. 1. 0.]
 [0. 1. 1. 1. 0.]
 [0. 1. 1. 1. 0.]
 [0. 0. 0. 0. 0.]]
'''

【1】np.pad

np.pad()用来在numpy数组的边缘进行数值填充。

np.pad(array,pad_width,mode,**kwargs)  # 返回填充后的numpy数组

【1】array:要填充的numpy数组【要对谁进行填充】

【2】pad_width:每个轴要填充的数据的数目【每个维度前、后各要填充多少个数据】

【3】mode:填充的方式【采用哪种方式填充】

cce3354406d148cd95aeccc9469dcf34.png



【4】参数mode解析


str(10种取值)、function


str类型取值包括:


‘constant’——表示连续填充相同的值,每个轴可以分别指定填充值,constant_values=(x, y)时前面用x填充,后面用y填充,缺省值填充0

‘edge’——表示用边缘值填充

‘linear_ramp’——表示用边缘递减的方式填充

‘maximum’——表示最大值填充

‘mean’——表示均值填充

‘median’——表示中位数填充

‘minimum’——表示最小值填充

‘reflect’——表示对称填充

‘symmetric’——表示对称填充

‘wrap’——表示用原数组后面的值填充前面,前面的值填充后面

【5】参数pad_width解析


pad_width参数类型:sequence,array_like,int


pad_width参数格式:((before_1, after_1), (before_2, after_2), … , (before_N, after_N))


第一个元素(before_1, after_1)表示第一维【列】的填充方式:前面填充before_1个数值,后面填充after_1个数值


第2个元素(before_2, after_2)表示第二维【行】的填充方式:前面填充before_2个数值,后面填充after_2个数值


【6】参数kwargs解析


字典类型,key包括:


stat_length:sequence、int、optional,用在"maximum", “mean”, “median”, "minimum"中,默认值是 None


constant_values:sequence、int、optional,用在"constant"中,默认值是 0


end_values:sequence、int、optional,用在"linear_ramp"中,默认值是 0


reflect_type:{‘even’, ‘old’},用在"reflect","symmetric"中



7、查找数组的元素数和长度


编写一个NumPy程序来查找数组的元素数,一个数组元素的长度(以字节为单位)以及元素消耗的总字节数。

在这里插入代码片

3af247193559454fbe4ab5d89bb7bc2f.png

【1】itemsize:输出array元素的字节数

【2】size:输出元素个数

【3】nbytes:计算数组中的所有数据消耗掉的字节数


8、获取数组的唯一元素


编写一个NumPy程序来获取数组的唯一元素。

import numpy as np
x = np.array([10, 10, 20, 20, 30, 30])
print("Original array:")
print(x)
print("Unique elements of the above array:")
print(np.unique(x))
x = np.array([[1, 1], [2, 3]])
print("Original array:")
print(x)
print("Unique elements of the above array:")
print(np.unique(x))
'''
import numpy as np
x = np.array([10, 10, 20, 20, 30, 30])
print("Original array:")
print(x)
print("Unique elements of the above array:")
print(np.unique(x))
x = np.array([[1, 1], [2, 3]])
print("Original array:")
print(x)
print("Unique elements of the above array:")
print(np.unique(x))
'''

67909aedc62d422a92d19b28fe6f0cc5.png


9、创建一个连续的扁平化数组


编写一个 NumPy 程序来创建一个连续的扁平化数组。

原始数组:

[[10 20 30]

[20 40 50]]

新的扁平化数组:

[10 20 30 20 40 50]


eec2324654ea4aeaa4e0fc5e1e62aa2b.png

import numpy as np
x = np.array([[10, 20, 30], [20, 40, 50]])
print("Original array:")
print(x)
y = np.ravel(x)
print("New flattened array:")
print(y)
'''
Original array:
[[10 20 30]
 [20 40 50]]
New flattened array:
[10 20 30 20 40 50]
'''


10、更改数组的数据类型


import numpy as np
x = np.array([[2, 4, 6], [6, 8, 10]], np.int32)
print(x)
print("Data type of the array x is:",x.dtype)
# Change the data type of x
y = x.astype(float)
print("New Type: ",y.dtype)
print(y)
'''
[[ 2  4  6]
 [ 6  8 10]]
Data type of the array x is: int32
New Type:  float64
[[ 2.  4.  6.]
 [ 6.  8. 10.]]
'''


【1】dtype:查看元素类型

【2】astype:改变元素数据类型


11、合并三个相同形状的给定NumPy数组


编写一个NumPy程序来合并三个相同形状的给定NumPy数组。

import numpy as np
arr1 = np.arange(1,7).reshape(2,3)
arr2 = np.arange(7,13).reshape(2,3)
arr3 = np.arange(13,19).reshape(2,3)
print("arr1:")
print(arr1)
print("arr2:")
print(arr2)
print("arr3:")
print(arr3)
result = np.concatenate((arr1, arr2, arr3), axis=1)
print("After concatenate,axis=1或者-1:")
print(result) 
result = np.concatenate((arr1, arr2, arr3), axis=0)
print("After concatenate,axis=0:")
print(result) 
'''
arr1:
[[1 2 3]
 [4 5 6]]
arr2:
[[ 7  8  9]
 [10 11 12]]
arr3:
[[13 14 15]
 [16 17 18]]
After concatenate,axis=1或者-1:
[[ 1  2  3  7  8  9 13 14 15]
 [ 4  5  6 10 11 12 16 17 18]]
After concatenate,axis=0:
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]
 [13 14 15]
 [16 17 18]]
'''

【2】np.concatenate

np.concatenate:数组拼接


concatenate((a1, a2, …), axis=0)


参数:


传入的参数必须是一个多个数组的元组或者列表


另外需要指定拼接的方向,默认是 axis = 0,也就是说对0轴的数组对象进行纵向的拼接(纵向的拼接沿着axis= 1方向);注:一般axis = 0,就是对该轴向的数组进行操作,操作方向是另外一个轴,即axis=1。


传入的数组必须具有相同的形状,这里的相同的形状可以传入的数组必须具有相同的形状,这里的相同的形状可以满足在拼接方向axis轴上数组间的形状一致即可


12、查找两个数组之间的公共值


编写一个NumPy程序来查找两个数组之间的公共值。

import numpy as np
array1 = np.array([0,60, 20, 40, 70])
print("Array1: ",array1)
array2 = [60, 30, 40]
print("Array2: ",array2)
print("Common values between two arrays:")
print(np.intersect1d(array1, array2))
'''
Array1:  [ 0 60 20 40 10]
Array2:  [60, 30, 40]
Common values between two arrays:
[40 60]
'''

【1】np.intersect1d函数:查找两个数组中相同的值,并且会按照从小到大的顺序返回新的数组,也可用于求两个数组的交集。数组可以是一维,也可以是多维(我试了二维可以)

ec490a860bf24780b1ceb5e6139a9ba1.png


13、查找两个数组的集合差值


编写一个NumPy程序来查找两个数组的集合差异。set 差异将返回 array1 中不在 array2 中的已排序的唯一值。

import numpy as np
array1 = np.array([0, 10, 20, 40, 60, 80])
print("Array1: ",array1)
array2 = [10, 30, 40, 50, 70]
print("Array2: ",array2)
print("Unique values in array1 that are not in array2:")
print(np.setdiff1d(array1, array2))
'''
Array1:  [ 0 10 20 40 60 80]
Array2:  [10, 30, 40, 50, 70]
Unique values in array1 that are not in array2:
[ 0 20 60 80]
'''

【3】np.setdiff1d


setdiff1d(ar1, ar2, assume_unique=False)

1.功能:找到2个数组中集合元素的差异。


2.返回值:在ar1中但不在ar2中的已排序的唯一值。


3.参数:


ar1:array_like 输入数组。

ar2:array_like 输入比较数组。

assume_unique:bool。如果为True,则假定输入数组是唯一的,即可以加快计算速度。 默认值为False。

7d8cf520186f4e2db17ef96ea6517c53.png


相关文章
|
1月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
292 1
|
1月前
|
Java 数据处理 索引
(numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
ndarray切片 索引从0开始 索引/切片类型 描述/用法 基本索引 通过整数索引直接访问元素。 行/列切片 使用冒号:切片语法选择行或列的子集 连续切片 从起始索引到结束索引按步长切片 使用slice函数 通过slice(start,stop,strp)定义切片规则 布尔索引 通过布尔条件筛选满足条件的元素。支持逻辑运算符 &、|。
137 0
|
3月前
|
机器学习/深度学习 API 异构计算
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
JAX是Google开发的高性能数值计算库,旨在解决NumPy在现代计算需求下的局限性。它不仅兼容NumPy的API,还引入了自动微分、GPU/TPU加速和即时编译(JIT)等关键功能,显著提升了计算效率。JAX适用于机器学习、科学模拟等需要大规模计算和梯度优化的场景,为Python在高性能计算领域开辟了新路径。
345 0
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
|
3月前
|
存储 数据采集 数据处理
Pandas与NumPy:Python数据处理的双剑合璧
Pandas与NumPy是Python数据科学的核心工具。NumPy以高效的多维数组支持数值计算,适用于大规模矩阵运算;Pandas则提供灵活的DataFrame结构,擅长处理表格型数据与缺失值。二者在性能与功能上各具优势,协同构建现代数据分析的技术基石。
337 0
|
11月前
|
计算机视觉 Python
PIL图像转换为Numpy数组:技术与案例详解
本文介绍了如何将PIL图像转换为Numpy数组,以便利用Numpy进行数学运算和向量化操作。首先简要介绍了PIL和Numpy的基本功能,然后详细说明了转换过程,包括导入库、打开图像文件、使用`np.array()`或`np.asarray()`函数进行转换,并通过打印数组形状验证转换结果。最后,通过裁剪、旋转和缩放等案例展示了转换后的应用,以及如何将Numpy数组转换回PIL图像。此外,还介绍了处理base64编码图像的完整流程。
426 4
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
276 2
|
存储 数据处理 Python
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第27天】在科学计算和数据分析领域,Python凭借简洁的语法和强大的库支持广受欢迎。NumPy和SciPy作为Python科学计算的两大基石,提供了高效的数据处理和分析工具。NumPy的核心功能是N维数组对象(ndarray),支持高效的大型数据集操作;SciPy则在此基础上提供了线性代数、信号处理、优化和统计分析等多种科学计算工具。结合使用NumPy和SciPy,可以显著提升数据处理和分析的效率,使Python成为科学计算和数据分析的首选语言。
300 3
|
存储 机器学习/深度学习 算法
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第26天】NumPy和SciPy是Python科学计算领域的两大核心库。NumPy提供高效的多维数组对象和丰富的数学函数,而SciPy则在此基础上提供了更多高级的科学计算功能,如数值积分、优化和统计等。两者结合使Python在科学计算中具有极高的效率和广泛的应用。
406 2
|
机器学习/深度学习 数据处理 Python
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
323 1
|
机器学习/深度学习 数据处理 计算机视觉
NumPy实践宝典:Python高手教你如何轻松玩转数据处理!
【8月更文挑战第22天】NumPy是Python科学计算的核心库,专长于大型数组与矩阵运算,并提供了丰富的数学函数。首先需安装NumPy (`pip install numpy`)。之后可通过创建数组、索引与切片、执行数学与逻辑运算、变换数组形状及类型、计算统计量和进行矩阵运算等操作来实践学习。NumPy的应用范围广泛,从基础的数据处理到图像处理都能胜任,是数据科学领域的必备工具。
175 0

推荐镜像

更多
下一篇
oss云网关配置