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

news/2025/11/22 22:29:08/文章来源:https://www.cnblogs.com/wangya216/p/19258754

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.mzph.cn/news/973463.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据部门和AI部门边界

目录背景和价值1. 大数据部门的职责 (Big Data Department - 平台建设方)2. AI部门的职责 (AI Department - 价值应用方)总结:技术总监的战略划分参考资料 背景和价值 这是一个在组织架构中非常关键的问题,也是检验技…

Post Processing

Post Processing后处理 Unity Grab URP Render Feature Godot screen_texture Godot 面片法

工作草稿

自行车产业链发展的三种模式 一、加工增值模式进口高端碳纤维(德国织布机) 17%关税车架、车把 8%关税 → 增值 50%高端自行车日本禧玛诺车零件关税 20% 增值 30% 国内销往鱼杆、船桨、高尔夫 (昆山、吉林、呼和浩特…

【Rust编程:从新手到大师】Rust 环境搭建(详细版) - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

OOP第一到三次作业总结 -单部电梯调度

一、前言 博主近期疏于学业,故而三次作业均没有完整实现出来,因此这是一篇反思文,同博主一样起步浑浑不清者,可借此文规避一些低效的思路。 (博主依赖ai成瘾,借主播血泪教训,建议读者切忌一味信赖ai!应当试着自…

2025年11月南通宠物医疗市场深度分析:专业服务与行业规范的标杆选择

在宠物经济快速发展的浪潮中,宠物医疗行业正经历从"基础服务"向"专业医疗"的深刻转型。据最新行业报告显示,南通地区宠物医疗市场规模年均增长达16.8%,宠物主人对医疗服务的期望已从"能看…

用户亲测!用 DiffMind 用 AI,省一半时间还出效果,小白也能轻松上手

用户亲测!用 DiffMind 用 AI,省一半时间还出效果,小白也能轻松上手“用 AI 写文案要切 3 个平台,改简历改 5 遍还不对,查个信息怕 AI 瞎编”—— 如果你也有这些糟心经历,那一定要试试DiffMind(官网www.diffmin…

软工团队作业3

作业信息这个作业属于哪个课程 首页 - 计科23级34班 - 广东工业大学 - 班级博客 - 博客园这个作业要求在哪里 团队作业3--需求改进&系统设计 - 作业 - 计科23级34班 - 班级博客 - 博客园这个作业的目标 明确团队项…

电梯调度迭代编程作业复盘

一、对三次电梯调度题目集的整体认知 (一)知识点覆盖与考察重点 三次电梯调度题目集聚焦面向对象编程核心知识点与工程化开发能力,核心考察内容可归纳为三类: 设计原则:核心是单一职责原则。从第一次的 “单类包揽…

球坐标系的大运动方程组

球坐标系的大运动方程组P=P(λ, φ, r) 其中,λ——经度φ——纬度r——地心到空间点的距离

【数据库】navicat的下载以及数据库约束 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

i2c linux

您提到的 "i2c linux" 可能是指与 I2C(I2C)总线 相关的 Linux 系统操作。I2C 是一种常用的串行通信协议,用于连接微控制器、传感器、EEPROM、Flash 存储器等设备。在 Linux 系统中,I2C 通常通过 i2c-dev…

hyper-v linux

您提到的 "Hyper-V Linux" 是一个与 Windows Hyper-V 技术相关的概念,但 Hyper-V 是 Windows 操作系统的功能,并不支持在 Linux 系统上直接运行。因此,Hyper-V Linux 并不是一个实际存在的功能或工具。?…

二维费用背包 尽量前后一直把好像也没关系

看清题目问的是什么 读懂题目vw是什么 include <bits/stdc++.h> using namespace std; int dp[105][105];//i忍耐度杀了 j时候的经验值 int v[105];int w[105]; int main() { int n,m,k,s; while(cin>>n&g…

详细介绍:在Windows中的Docker与WSL2的关系,以及与WSL2中安装的Ubuntu等其它实例的关系

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

ThinkPHP5 RCE+Linux find提权渗透实战:原理+复现(CVE-2018-20062) - 详解

ThinkPHP5 RCE+Linux find提权渗透实战:原理+复现(CVE-2018-20062) - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-fam…

团队作业3--需求改进与系统设计

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class12Grade23ComputerScience这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/Class12Grade23ComputerScience/homework/134731.需求改进 功能分…

OI 笑传 #33

仮面の街今天是 bct Day 3,赛时 \(100+20+15+50=185\),rk.11。 没有挂分很舒适。 评价是 ok 场,复习(?)了下期望这一块。写了 T1,T4 的拍子。 T1 考虑从小到大填数,这样这个数的排名就是后面空位的数量,填到对…

PySpark - Read Data from PostgreSQL

PySpark - Read Data from PostgreSQL jdbc_url = "jdbc:postgresql://localhost:5432/postgres" properties = {"user": "postgres","password": "postgrespwd",&…

单部电梯调度总结

第一次作业: 作业内容: 基础配置:支持自定义最小(≥1)、最大楼层(> 最小楼层),默认停靠 1 层; 请求处理:区分电梯内(纯楼层)、电梯外(楼层 + 方向)请求,支持上行 / 下行方向,过滤无效请求; 调度规…