当前位置: 首页 > news >正文

Numpy模块下的ndarray介绍

文章目录

  • 导入numpy模块
  • 根据列表生成数组
  • 创建各维度的数组
  • ndim属性和shape属性的区别
  • 数据点的维度和数组的维度区别
  • a= np.array([[[-5, 0]], [[5, 0]]]) 和 b= np.array([[[-5, 0], [5, 0]]])的区别

导入numpy模块

import numpy as np

根据列表生成数组

以一维数组为例:

# 一维数组
arr1 = np.array([1, 2, 3, 4]) #[1, 2, 3, 4]是python内置的列表结构,据此生成数组

ndarray:是arr1的数据类型。其中 nd:表示n维,array:表示数组。整体表示 n维数组的意思。

创建各维度的数组

# 一维数组
arr1 = np.array([1, 2, 3, 4])
# 二维数组
arr2 = np.array([[1, 2], [3, 4]])
# 三维数组
arr3 = np.array([[[1, 2]], [[3, 4]]])
# 四维数组
arr4 = np.array([[[[1, 2, 3]]], [[[4, 5, 6]]]])

下面详细介绍下一到四维度的数组,通过视觉判断数组维度的方法:可以数两端(其中一端都可以)的[的个数。也可以通过程序代码来判断:以arr1为例,arr1.ndim的返回值
一维数组:

arr1 = np.array([1, 2, 3, 4])
print(f"arr1.ndim: {arr1.ndim}")    # 1    
print(f"arr1.shape: {arr1.shape}")  # (4,)
print(f"arr1长度: {len(arr1)}")      # 4
# 第0个元素: 4 - 表示有4个元素

问题:arr1.shape的输出(4,)为啥是这样,它没有行和列吗?
arr1.shape输出(4,)是因为:

  1. 一维数组没有行列概念:
  • 一维数组只有长度,没有行和列的区分
  • (4,)表示这个数组有4个元素
  1. 形状元组的含义:
  • (4,)中的逗号表示这是一个元组
  • 4表示数组长度为4
  • 没有第二个元素表示只有1个维度

二维数组:

arr2 = np.array([[1, 2], [3, 4], [5, 6]])
print(f"arr2.ndim: {arr2.ndim}")    # 2
print(f"arr2.shape: {arr2.shape}")  # (3, 2)
# 第0个元素: 3 - 表示有3行
# 第1个元素: 2 - 表示每行有2列

可以这样直观的看行和列数:
arr2 = np.array([
[1, 2],
[3, 4],
[5, 6]
])
问题:arr2.shape的输出为 (3, 2),它没有二维平面吗?
三维数组才有平面概念,二维数组没有平面概念。
问题:二维数组是不是有一个二维平面。其实就是1
回答

import numpy as np# 二维数组可以看作有1个二维平面
arr2 = np.array([[1, 2], [3, 4]])
print(f"arr2.shape: {arr2.shape}")  # (2, 2)
print(f"arr2.ndim: {arr2.ndim}")    # 2# 等价于三维数组的1个平面
arr3 = np.array([[[1, 2], [3, 4]]])  # 注意外面多一层[]
print(f"arr3.shape: {arr3.shape}")  # (1, 2, 2)
print(f"arr3.ndim: {arr3.ndim}")    # 3# 验证两者的关系
print(f"arr2 == arr3[0]: {np.array_equal(arr2, arr3[0])}")  # True

理解方式:*

  • 二维数组 = 1个二维平面
  • 三维数组 = 多个二维平面
  • arr3[0]就是取三维数组的第0个平面,结果就是二维数组

三维数组:

# 三维数组
arr3 = np.array([[[1, 2]], [[3, 4]]])
print(f"arr3.shape: {arr3.shape}")  # (2, 1, 2)
# 第0个元素: 2 - 表示有2个二维平面,即 [[1, 2]] 和  [[3, 4]] 分别代表1个二维平面。
# 第1个元素: 1 - 表示每个平面有1行
# 第2个元素: 2 - 表示每行有2列

问题:三维数组的平面概念是不是就是图层?
是的,三维数组的平面概念可以理解为图层:

import numpy as np# 三维数组 - 可以看作多个图层
arr3 = np.array([[[1, 2]], [[3, 4]]])
print(f"arr3.shape: {arr3.shape}")  # (2, 1, 2)
# 第0轴: 2个图层
# 第1轴: 每个图层1行
# 第2轴: 每行2列# 访问不同图层
print("第0个图层:")
print(arr3[0])  # [[1 2]]
print("第1个图层:")
print(arr3[1])  # [[3 4]]# 更明显的图层示例
layers = np.array([[[1, 2, 3], [4, 5, 6]],      # 第0层[[7, 8, 9], [10, 11, 12]],   # 第1层[[13, 14, 15], [16, 17, 18]] # 第2层
])
print(f"layers.shape: {layers.shape}")  # (3, 2, 3)
# 3个图层,每层2行3列

四维数组:

import numpy as np# 四维数组示例
arr4 = np.array([[[[1, 2, 3]]], [[[4, 5, 6]]]])
print(f"arr4.ndim: {arr4.ndim}")    # 4
print(f"arr4.shape: {arr4.shape}")  # (2, 1, 1, 3)# 更直观的四维数组
arr4_demo = np.array([[[[1, 2], [3, 4]], [[5, 6], [7, 8]]],      # 第0个三维块[[[9, 10], [11, 12]], [[13, 14], [15, 16]]] # 第1个三维块
])
print(f"arr4_demo.ndim: {arr4_demo.ndim}")    # 4
print(f"arr4_demo.shape: {arr4_demo.shape}")  # (2, 2, 2, 2)

四维数组shape的理解

  • shape元组有4个元素:(a, b, c, d)
  • 第0个元素a:有a个三维块
  • 第1个元素b:每个三维块有b个二维平面
  • 第2个元素c:每个二维平面有c行
  • 第3个元素d:每行有d列

ndim属性和shape属性的区别

array.ndim

  • 返回数组的维度数(标量值)
  • 表示数组有多少个轴

array.shape:

  • 返回数组各维度的大小(元组)
  • 表示每个轴上有多少元素

数据点的维度和数组的维度区别

数据点的维度(特征维度)
指每个数据点有多少个特征属性
例如:一个二维坐标点 [x, y],数据点维度是2

数组的维度(形状维度)
指数组的结构形状,有多少行、列等
例如:100个数据点,每个点2维,数组形状是(100, 2)
在代码中对应整个数组的shape属性

import numpy as np# 示例:100个二维数据点
data = np.random.rand(100, 2)
#    ^    ^    ^
#    |    |    |
# 数组维度  |   数据点维度
# (形状)  数组维度  (特征数)
# (100,2) (2维)   (每个点2个特征)

数组的形状维度对应的是shape。数组维度对应的是ndim。通过上面的观察可知ndim的标量值,对应的是shape(是一个元组)的元素个数。

a= np.array([[[-5, 0]], [[5, 0]]]) 和 b= np.array([[[-5, 0], [5, 0]]])的区别

import numpy as np
a= np.array([[[-5, 0]], [[5, 0]]]) # a有两个二维平面(去掉最外层的[],看里面有几个二维数组,就是有几个二维平面)
print(f"a.ndim: {a.ndim}")    # 3
print(f"a.shape: {a.shape}")  # (2, 1, 2)b= np.array([[[-5, 0], [5, 0]]]) # b有一个二维平面(去掉最外层的[],看里面有几个二维数组,就是有几个二维平面)
print(f"b.ndim: {b.ndim}")    # 3
print(f"b.shape: {b.shape}")  # (1, 2, 2)

小技巧:去掉最外层的[],看里面有几个二维数组,就是有几个二维平面。

http://www.dtcms.com/a/344546.html

相关文章:

  • vscode 插件 远程服务器无法下载
  • Axure下载安装教程(附安装包)Axure RP 11 超详细下载安装教程
  • AI多模态分析框架下的黄金下跌波动:鲍威尔讲话前的政策信号与量化因子共振
  • Mongodb操作指南
  • kafka的rebalance机制是什么
  • 赛思电子工业级晶振,工业控制的隐形“智”动力
  • Linux服务器定时监测服务脚本
  • det_cam_visualizer.py 函数逐行解读记录
  • (纯新手教学)计算机视觉(opencv)实战八——四种边缘检测详解:Sobel、Scharr、Laplacian、Canny
  • Redis 678
  • 2025-08-22 Python进阶10——魔术方法
  • K8s的相关知识总结
  • X00238-非GNSS无人机RGB图像卫星图像视觉定位python
  • Django中间件自定义开发指南:从原理到实战的深度解析
  • 广播级讯道摄像机CCU后挂上的PGM、ENG、PROD音频旋钮是做什么用的?
  • js:beforeUnload这个方法能不能监听到关闭浏览器和刷新浏览器行为
  • 视觉语言大模型应用开发——基于 CLIP、Gemini 与 Qwen2.5-VL 的视频理解内容审核全流程实现
  • uniapp image标签展示视频第一帧
  • 【Linux】Vim编辑器:从入门到高效使用
  • MiniCPM-V4.0开源并上线魔乐社区,多模态能力进化,手机可用,还有最全CookBook!
  • WebRTC 结合云手机:释放实时通信与虚拟手机的强大协同效能
  • 聚焦科技前沿,华金证券与非凸科技共探数智交易新路径
  • 【GaussDB】全密态等值查询功能测试及全密态技术介绍
  • UNIKGQA论文笔记
  • SYBASE ASE、Oracle、MySQL/MariaDB、SQL Server及PostgreSQL在邮件/短信发送功能上的全面横向对比报告
  • 全景式综述|多模态目标跟踪全面解析:方法、数据、挑战与未来
  • #Datawhale 组队学习#8月-工作流自动化n8n入门-2
  • 基于51单片机的超声波液位检测OLED显示设计
  • MySQL InnoDB表空间深度解析:从原理到性能优化
  • Seaborn数据可视化实战:Seaborn与Plotly交互式图表入门