首页 > 其他分享 >6.科学计算模块Numpy(3)对ndarray数组的常用操作

6.科学计算模块Numpy(3)对ndarray数组的常用操作

时间:2024-09-06 21:50:30浏览次数:9  
标签:arr 科学计算 print 拼接 数组 numpy np Numpy ndarray

引言

众所周知,numpy能作为python中最受欢迎的数据处理模块,脱离不了它最核心的部件——ndarray数组。那么,我们今天就来了解一下numpy中对ndarray的常用操作。

通过阅读本篇博客你可以:

1.掌握ndarray数组的切片和copy

2.学会如何改变ndarray的数组维度

3.掌握数组的拼接

一、ndarray数组的切片和copy

1.ndarray数组的切片

ndarray对象的内容可以通过索引或切片来访问和修改,与Python中的list的切片操作一样。ndarray数组可以基于0-n的下标进行索引,并设置start,stop,step参数,从原数组中切割出一个新数组。

代码示例如下:

import numpy as np

# 一维数组切片和索引的使用
x = np.arange(10)
print(x)  # [0 1 2 3 4 5 6 7 8 9]
y = x[2:9:2]
print(y)  # [2 4 6 8]
z = x[2:]
print(z)  # [2 3 4 5 6 7 8 9]

2.copy()

numpy.copy()可以用来复制ndarray数组。这个时候就有人要问了:“我们直接用切片或者说直接赋值给一个新变量来获取原数组不也同样可以做到复制的效果吗?”

这就是我们要讲的copy()普通切片赋值操作的区别。我们直接看下面的代码示例

import numpy as np

# 直接切片赋值
arr = np.arange(10)
temp = arr[:3]
temp[0] = 100
print(arr)  # [100   1   2   3   4   5   6   7   8   9]

# copy()复制
arr = np.arange(10)
temp = np.copy(arr[:3])
temp[0] = 100
print(arr)  # [0 1 2 3 4 5 6 7 8 9]

从上述的代码我们能看出来,直接切片赋值得到的temp变量,在改变了0索引之后,原数组arr也改变了0索引的值。而copy()复制得到的temp变量,在改变了0索引之后,原数组arr并没有改变0索引的值。这是由于直接切片赋值得到的temp变量与原数组arr共享同一块内存,属于浅拷贝。而copy()复制的temp变量是一个新的数组,属于深拷贝

结论:

①直接切片赋值对切片的修改会影响原始数组

②copy()复制对副本的修改不会影响原始数组

二、ndarray数组的维度改变

处理数组的一项重要工作就是改变数组的维度,包含提升数组的维度和降低数组的维度。numpy中封装了大量的方法用来改变数组的维度。

1.reshape()

使用numpy.reshape()函数,你可以将一个数组的形状转变为另一个形状,而不改变数组中的数据。

代码示例如下:

import numpy as np

# 将一维数组改为 2 * 5 的二维数组
arr = np.arange(10)
res = arr.reshape(2, 5)
print(res)
"""[[0 1 2 3 4]
    [5 6 7 8 9]]
"""

2.ravel()

numpy.ravel()可以将多维ndarray数组转换成一维数组。

代码示例如下:

import numpy as np

# 创建一个二维数组
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr)
"""[[1 2 3]
    [4 5 6]]
"""
# 使用 ravel() 展平数组
flattened_arr = arr.ravel()
print(flattened_arr)  # [1 2 3 4 5 6]

3.flatten()

numpy.flatten()函数同numpy.ravel()一样可以将多维数组展平为一维数组。但是numpy.flatten()会返回一个展平后的副本,如果修改副本不会影响原数组。但numpy.ravel()是返回一个视图,修改展平后的视图会影响到原数组。

代码示例如下:

import numpy as np

# 创建一个二维数组
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr)
"""[[1 2 3]
    [4 5 6]]
"""

# 使用 flatten() 展平数组
flattened_arr = arr.flatten()
print(flattened_arr)  # [1 2 3 4 5 6]

三、ndarray数组的拼接

1.水平数组的组合

hstack()

numpy.hstack()函数用于多维数组的水平拼接,在拼接数组时沿着第一个轴(即横轴)进行操作,因此适用于二维数组的列拼接,也可以用于更高维度数组的横向拼接。

代码示例如下:

import numpy as np

# 创建两个二维数组
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([[7, 8, 9], [10, 11, 12]])

# 使用 hstack() 进行水平拼接
result = np.hstack((arr1, arr2))
print(result)
"""[[ 1  2  3  7  8  9]
    [ 4  5  6 10 11 12]]
"""

2.垂直数组的组合

vstack()

numpy.vstack()函数可以将多个数组沿着垂直方向拼接,在拼接数组时沿着第二个轴(即纵轴)进行操作,因此适用于二维数组的行拼接,也可以用于更高维度数组的纵向拼接。

代码示例如下:

import numpy as np

# 创建两个二维数组
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([[7, 8, 9], [10, 11, 12]])

# 使用 vstack() 进行垂直拼接
result = np.vstack((arr1, arr2))
print(result)
"""[[ 1  2  3]
    [ 4  5  6]
    [ 7  8  9]
    [10 11 12]]
"""

3.通用的数组的拼接

concatenate()

import numpy as np
np.concatenate((a0,a1,...,an),axis)

numpy.concatenate()函数可用于水平组合也可用于垂直组合。具体使用哪个方向取决于参数axis。如果参数axis = 0,则是垂直拼接;如果参数axis = 1,则是水平拼接。

代码示例如下:

import numpy as np

# 创建三个二维数组
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([[7, 8, 9], [10, 11, 12]])
arr3 = np.array([[13, 14, 15], [16, 17, 18]])

# 沿着第一个轴(纵向)拼接
result_axis0 = np.concatenate((arr1, arr2, arr3), axis=0)
print(result_axis0)
"""[[ 1  2  3]
    [ 4  5  6]
    [ 7  8  9]
    [10 11 12]
    [13 14 15]
    [16 17 18]]
"""

# 沿着第二个轴(横向)拼接
result_axis1 = np.concatenate((arr1, arr2, arr3), axis=1)
print(result_axis1)
"""[[ 1  2  3  7  8  9 13 14 15]
    [ 4  5  6 10 11 12 16 17 18]]
"""

总结 

本章博客介绍了numpy模块中多维数组的切片、维度的改变以及不同的拼接方法。希望可以对大家起到作用,谢谢。


关注我,内容持续更新(后续内容在作者专栏《从零基础到AI算法工程师》)!!!

标签:arr,科学计算,print,拼接,数组,numpy,np,Numpy,ndarray
From: https://blog.csdn.net/dxyl632956/article/details/141966094

相关文章

  • Numpy中reshape的用法
    目录语法介绍示例示例1示例2示例3示例4语法介绍numpy.reshape(a,newshape,order=‘C’)在不改变数据的情况下给数组一个新的形状。就是先将数组按给定索引顺序一维展开,然后按与展开时相同的索引顺序将展开的元素填充到新数组中;即等价于np.reshape(np.revel(arr......
  • Numpy中生成数组的常用方法
    目录1.np.arrage()2.np.arange()3.ones/empty/zeros函数4.np.randomnp.random.rand():np.random.random():np.random.randn()np.random.randint(low,high,size,dtype)np.random.uniform(low,high,size)np.linspace1.np.arrage()importnumpyasnp##下面两种结果相同......
  • 5.科学计算模块Numpy(2)随机数的生成和ndarray属性及其创建方式
    引言通过上一篇4.科学计算模块Numpy(1)概述与初始操作-CSDN博客,我们已经了解了Numpy的概念和Numpy数组的创建,今天我们来介绍一下Numpy模块中随机数的生成和ndarray属性及其创建方式。通过阅读本篇博客,你可以:1.掌握如何使用numpy.random模块生成随机数2.了解ndarray数组的属性......
  • 【机器学习】嘿马机器学习(科学计算库)第8篇:Pandas,学习目标【附代码文档】
    本教程的知识点为:机器学习(常用科学计算库的使用)基础定位机器学习概述机器学习概述1.5机器学习算法分类1监督学习机器学习概述1.7Azure机器学习模型搭建实验Azure平台简介Matplotlib3.2基础绘图功能—以折线图为例1完善原始折线图—给图形添加辅助功能M......
  • NumPyro入门API和开发人员参考 pyro分布推理效果处理程序贡献代码更改日志入门教程使
    NumPyro文档¶NumPyro入门API和开发人员参考烟火元素分布推理效果处理程序贡献代码更改日志入门教程使用NumPyro的贝叶斯回归贝叶斯分层线性回归例如:棒球击球率示例:变型自动编码器例子:尼尔的漏斗例子:随机波动例如:亚麻和俳句可变推断参数化NumPyro模型的自动绘制不良后几何及......
  • 使用numpy快速实现统计分析的常用代码实现
    文末赠免费精品编程资料~~NumPy是Python编程语言中用于数值计算的核心库之一,在统计分析方面,它也提供了各种各样的函数来实现统计分析。NumPy统计分析功能概览基本统计量:计算平均值、中位数、众数、标准差、方差等。 排序和搜索:排序数组、查找最大值、最小值、百分位......
  • NumPy 随机数据分布与 Seaborn 可视化详解
    随机数据分布什么是数据分布?数据分布是指数据集中所有可能值出现的频率,并用概率来表示。它描述了数据取值的可能性。在统计学和数据科学中,数据分布是分析数据的重要基础。NumPy中的随机分布NumPy的random模块提供了多种方法来生成服从不同分布的随机数。生成离散分布随机......
  • 组合分类器基础实验——numpy实现或sklearn借口调用:袋装Bagging, 随机森林, 提升Boost
    袋装(Bagging)基本思想对原训练数据集采用随机有放回抽样的方法选择子数据集从而构造组合分类器。给定含有n个样本的数据集合D,袋装在构造指定的T个基础模型(以基分类器为例)的基本过程:对D进行采样,得到若干个大小相同子数据集Di(i=1,2,…,T),Di中可能包含重复样本(因为对每个Di采用的......
  • 用Python爬取地图信息被捕了?Python主要有哪些用途:Web开发、数据科学和人工智能、科学
    近日,一起关于导航电子地图“拥堵延时指数”数据权益的不正当竞争纠纷案在北京市朝阳区人民法院落下帷幕,引发热议。 爬虫确实是学习Python最有意思的一件事情,也是Python很擅长的事情之一。很多铁铁日常使用Python爬天爬地,也还有很多想学爬虫来自动获取数据。如果你正在学习......
  • Python学习-[numpy库]-初级
    创建数组:np.array([1,2,3,4,5])使用zeros创建全零数组:np.zeros((3,2))代表一个三行二列的数组:array([0.,0.], [0.,0.], [0.,0.])获取数组的尺寸:a=np.zeros((3,2))a.shape#输出结果为:(3,2)第一个数据展示数组第一维的长度,第二个数据展示数......