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

`np.array` 和 `np.ndarray`是什么关系?

np.arraynp.ndarray 是 NumPy 中两个密切相关但用途和行为完全不同的概念。理解它们的关系是掌握 NumPy 的关键之一。


🔹 1. np.ndarray:NumPy 数组的底层类(类型)

  • numpy.ndarray所有 NumPy 数组对象的实际 Python 类型
  • 它是一个类(class),定义了数组的数据结构、属性(如 .shape, .dtype)和方法(如 .sum(), .reshape())。
  • 所有通过 NumPy 创建的数组,其类型都是 numpy.ndarray
import numpy as npa = np.array([1, 2, 3])
print(type(a))          # <class 'numpy.ndarray'>
print(isinstance(a, np.ndarray))  # True

✅ 所有 NumPy 数组都是 np.ndarray 的实例。


🔹 2. np.array:创建 ndarray 对象的函数

  • np.array() 是一个工厂函数(function),用于从 Python 列表、元组或其他可迭代对象创建一个新的 ndarray 实例
  • 它会自动推断数据类型,并初始化数据内容
arr = np.array([1, 2, 3])        # 推荐方式!
print(arr)                       # [1 2 3]
print(type(arr))                 # <class 'numpy.ndarray'>

np.array() 是你日常创建数组的主要方式


🔸 关键区别总结

特性 np.array np.ndarray
类型 函数(callable) (class)
用途 创建并初始化数组 定义数组的类型和行为
数据初始化 ✅ 自动用输入数据初始化 不初始化(可能含垃圾值)
使用频率 ⭐⭐⭐⭐⭐ 日常首选 ⭐ 很少直接使用
安全性 安全、可靠 危险(未初始化内存)

🔸 为什么不推荐直接用 np.ndarray(...)

虽然你可以直接调用 np.ndarray 构造函数,但它不会用你的数据初始化数组内容,而是分配一块内存(可能包含任意垃圾值),除非你显式传入 buffer

示例对比:

# ✅ 正确方式:使用 np.array
a = np.array([1, 2, 3])
print(a)  # [1 2 3]# ⚠️ 危险方式:直接调用 np.ndarray
b = np.ndarray(shape=(3,), dtype=int)
print(b)  # 可能输出 [123456789 0 -987654321] —— 垃圾值!# 如果非要初始化,需手动赋值或用 buffer(复杂且不直观)
c = np.ndarray(shape=(3,), dtype=int, buffer=np.array([1,2,3]))
print(c)  # [1 2 3] —— 但何必这么麻烦?

📌 官方文档明确建议:优先使用 np.array()np.zeros()np.ones() 等函数创建数组,不要直接实例化 np.ndarray


🔸 类比理解(帮助记忆)

可以把它们类比为:

  • np.ndarray“汽车的设计图纸/类”
  • np.array()“汽车制造厂的生产线函数”

你想开一辆车,应该去生产线下单(np.array([1,2,3])),而不是自己拿着图纸去拼装底盘(np.ndarray(...))——后者既麻烦又容易出错。


✅ 最佳实践

  • 总是使用 np.array() 来从已有数据创建数组。
  • 使用 np.zeros(), np.ones(), np.empty(), np.full() 等来创建特定初始值的数组。
  • 不要直接调用 np.ndarray(),除非你在写非常底层的代码(比如自定义数组子类),且知道自己在做什么。

🔚 总结一句话:

np.array 是创建 ndarray 对象的推荐函数;np.ndarray 是所有 NumPy 数组的底层类类型。日常编程中,你几乎只用 np.array,而不需要直接碰 np.ndarray

http://www.gsyq.cn/news/57669.html

相关文章:

  • 工作草稿
  • 详细介绍:在Windows中的Docker与WSL2的关系,以及与WSL2中安装的Ubuntu等其它实例的关系
  • 团队作业3--需求改进与系统设计
  • OI 笑传 #33
  • 50040_基于微信小程序的项目管理系统
  • hyper for linux
  • 锂矿及其投资机会
  • 获深圳人才集团认可!「张张讲AI」AI资讯公众号解读AI动态,讲师提供定制化咨询
  • 若依框架源码—2
  • html空间能用于表单吗
  • 01背包不可达状态 二维的
  • 实用指南:阮一峰《TypeScript 教程》学习笔记——类型断言
  • Unable to add window -- token null is not valid; is your activity running?
  • 单步电梯调度系统总结
  • 扩散模型变天?何恺明发布JiT架构,揭示高维空间预测的真相
  • 使用routers自动生成路由的路由器设计原则,类视图设计原则,序列化器类的设计原则
  • KingbaseES:为银行核心系统迁移开启新航道 - 详解
  • 20232422 2025-2026-1 《网络与系统攻防技术》实验六实验报告
  • html空间如何添加滚动条
  • 2025年11月DR耐油橡胶热缩管,线缆标识热缩管,防滑花纹热缩管厂商推荐:耐油等级与使用寿命解析
  • 【minimap2】一定要注意组合参数
  • 3-数据库
  • 1-计算机网络
  • html空间如何添加图片
  • Trick——字符串
  • BLOG-1-电梯调度算法
  • 线圈公司质量排名,线圈生产厂家性价比推荐,变压器公司行业排名,变压器生产厂家客户推荐。滤波器公司技术排名,开关变压器公司性价比榜单
  • 2022年春季研究资助计划征集技术提案
  • 2025年集成房屋设计公司十大排名,岗亭加工厂家十大排行榜,专业岗亭定制工厂怎么选?彩钢移动厕所厂家推荐。
  • 图像的颜色模式