[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-wkentaro--pytorch-for-numpy-users":3,"tool-wkentaro--pytorch-for-numpy-users":61},[4,18,26,36,44,52],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",141543,2,"2026-04-06T11:32:54",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",107888,"2026-04-06T11:32:50",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":10,"last_commit_at":50,"category_tags":51,"status":17},4487,"LLMs-from-scratch","rasbt\u002FLLMs-from-scratch","LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目，旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型（LLM）。它不仅是同名技术著作的官方代码库，更提供了一套完整的实践方案，涵盖模型开发、预训练及微调的全过程。\n\n该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型，却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码，用户能够透彻掌握 Transformer 架构、注意力机制等关键原理，从而真正理解大模型是如何“思考”的。此外，项目还包含了加载大型预训练权重进行微调的代码，帮助用户将理论知识延伸至实际应用。\n\nLLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API，而是渴望探究模型构建细节的技术人员而言，这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计：将复杂的系统工程拆解为清晰的步骤，配合详细的图表与示例，让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础，还是为未来研发更大规模的模型做准备",90106,"2026-04-06T11:19:32",[35,15,13,14],{"id":53,"name":54,"github_repo":55,"description_zh":56,"stars":57,"difficulty_score":10,"last_commit_at":58,"category_tags":59,"status":17},4292,"Deep-Live-Cam","hacksider\u002FDeep-Live-Cam","Deep-Live-Cam 是一款专注于实时换脸与视频生成的开源工具，用户仅需一张静态照片，即可通过“一键操作”实现摄像头画面的即时变脸或制作深度伪造视频。它有效解决了传统换脸技术流程繁琐、对硬件配置要求极高以及难以实时预览的痛点，让高质量的数字内容创作变得触手可及。\n\n这款工具不仅适合开发者和技术研究人员探索算法边界，更因其极简的操作逻辑（仅需三步：选脸、选摄像头、启动），广泛适用于普通用户、内容创作者、设计师及直播主播。无论是为了动画角色定制、服装展示模特替换，还是制作趣味短视频和直播互动，Deep-Live-Cam 都能提供流畅的支持。\n\n其核心技术亮点在于强大的实时处理能力，支持口型遮罩（Mouth Mask）以保留使用者原始的嘴部动作，确保表情自然精准；同时具备“人脸映射”功能，可同时对画面中的多个主体应用不同面孔。此外，项目内置了严格的内容安全过滤机制，自动拦截涉及裸露、暴力等不当素材，并倡导用户在获得授权及明确标注的前提下合规使用，体现了技术发展与伦理责任的平衡。",88924,"2026-04-06T03:28:53",[14,15,13,60],"视频",{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":67,"readme_en":68,"readme_zh":69,"quickstart_zh":70,"use_case_zh":71,"hero_image_url":72,"owner_login":73,"owner_name":74,"owner_avatar_url":75,"owner_bio":76,"owner_company":77,"owner_location":78,"owner_email":79,"owner_twitter":80,"owner_website":81,"owner_url":82,"languages":83,"stars":92,"forks":93,"last_commit_at":94,"license":95,"difficulty_score":96,"env_os":97,"env_gpu":98,"env_ram":98,"env_deps":99,"category_tags":105,"github_topics":106,"view_count":32,"oss_zip_url":79,"oss_zip_packed_at":79,"status":17,"created_at":109,"updated_at":110,"faqs":111,"releases":140},4605,"wkentaro\u002Fpytorch-for-numpy-users","pytorch-for-numpy-users","PyTorch for Numpy users. https:\u002F\u002Fpytorch-for-numpy-users.wkentaro.com","pytorch-for-numpy-users 是一份专为熟悉 NumPy 的开发者打造的 PyTorch 快速迁移指南。对于许多从传统科学计算或机器学习入门的用户而言，NumPy 是处理数组的核心工具，而转向深度学习框架 PyTorch 时，往往需要重新记忆大量的 API 名称和数据类型定义，这构成了不小的学习门槛。\n\n这份开源资源精准地解决了这一痛点，它通过清晰的对照表形式，将 NumPy 中的常用操作（如数组创建、数据类型转换、矩阵运算等）与 PyTorch 中的对应函数一一映射。无论是基础的 `np.ndarray` 对应 `torch.Tensor`，还是复杂的 `np.zeros_like` 对应 `torch.zeros_like`，用户都能在此找到直观的答案。其独特的技术亮点在于内容的高度结构化与自动化维护，确保了代码示例始终适配最新版本的 PyTorch 和 NumPy，避免了因版本迭代导致的文档过时问题。\n\n该工具非常适合已经掌握 NumPy 基础、希望平滑过渡到深度学习领域的研究人员、算法工程师及高校学生使用。它不只是一份简单的速查表，更是一座连接经典数值计算与现","pytorch-for-numpy-users 是一份专为熟悉 NumPy 的开发者打造的 PyTorch 快速迁移指南。对于许多从传统科学计算或机器学习入门的用户而言，NumPy 是处理数组的核心工具，而转向深度学习框架 PyTorch 时，往往需要重新记忆大量的 API 名称和数据类型定义，这构成了不小的学习门槛。\n\n这份开源资源精准地解决了这一痛点，它通过清晰的对照表形式，将 NumPy 中的常用操作（如数组创建、数据类型转换、矩阵运算等）与 PyTorch 中的对应函数一一映射。无论是基础的 `np.ndarray` 对应 `torch.Tensor`，还是复杂的 `np.zeros_like` 对应 `torch.zeros_like`，用户都能在此找到直观的答案。其独特的技术亮点在于内容的高度结构化与自动化维护，确保了代码示例始终适配最新版本的 PyTorch 和 NumPy，避免了因版本迭代导致的文档过时问题。\n\n该工具非常适合已经掌握 NumPy 基础、希望平滑过渡到深度学习领域的研究人员、算法工程师及高校学生使用。它不只是一份简单的速查表，更是一座连接经典数值计算与现代深度学习框架的桥梁，帮助用户将精力集中在模型逻辑本身，而非繁琐的语法记忆中，从而高效地完成技术栈的升级。","\u003C!-- DO NOT EDIT THIS FILE MANUALLY. This file is generated by generate_readme.py from conversions.yaml so please edit and run them. -->\n# PyTorch for Numpy users.\n\n![ci](https:\u002F\u002Fgithub.com\u002Fwkentaro\u002Fpytorch-for-numpy-users\u002Fworkflows\u002Fci\u002Fbadge.svg)\n![gh-pages](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fdeployments\u002Fwkentaro\u002Fpytorch-for-numpy-users\u002Fgithub-pages?label=gh-pages)\n\n\n[PyTorch](https:\u002F\u002Fgithub.com\u002Fpytorch\u002Fpytorch.git) version of [_Torch for Numpy users_](https:\u002F\u002Fgithub.com\u002Ftorch\u002Ftorch7\u002Fwiki\u002FTorch-for-Numpy-users).  \nWe assume you use the latest PyTorch and Numpy.\n\n\n## How to contribute?\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fwkentaro\u002Fpytorch-for-numpy-users.git\ncd pytorch-for-numpy-users\nvim conversions.yaml\ngit commit -m \"Update conversions.yaml\"\n\n.\u002Frun_tests.py\n```\n\n\n\u003Ch2>Types\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Numpy                 \u003C\u002Fth>\u003Cth>PyTorch                                \u003C\u002Fth>\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.ndarray\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.Tensor\u003C\u002Fpre>               \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.float32\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.float32; torch.float\u003C\u002Fpre> \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.float64\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.float64; torch.double\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.float16\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.float16; torch.half\u003C\u002Fpre>  \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.int8\u003C\u002Fpre>   \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.int8\u003C\u002Fpre>                 \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.uint8\u003C\u002Fpre>  \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.uint8\u003C\u002Fpre>                \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.int16\u003C\u002Fpre>  \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.int16; torch.short\u003C\u002Fpre>   \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.int32\u003C\u002Fpre>  \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.int32; torch.int\u003C\u002Fpre>     \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.int64\u003C\u002Fpre>  \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.int64; torch.long\u003C\u002Fpre>    \u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2>Ones and zeros\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Numpy                       \u003C\u002Fth>\u003Cth>PyTorch                        \u003C\u002Fth>\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.empty((2, 3))\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.empty(2, 3)\u003C\u002Fpre>  \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.empty_like(x)\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.empty_like(x)\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.eye\u003C\u002Fpre>          \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.eye\u003C\u002Fpre>          \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.identity\u003C\u002Fpre>     \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.eye\u003C\u002Fpre>          \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.ones\u003C\u002Fpre>         \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.ones\u003C\u002Fpre>         \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.ones_like\u003C\u002Fpre>    \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.ones_like\u003C\u002Fpre>    \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.zeros\u003C\u002Fpre>        \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.zeros\u003C\u002Fpre>        \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.zeros_like\u003C\u002Fpre>   \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.zeros_like\u003C\u002Fpre>   \u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2>From existing data\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Numpy                                                                     \u003C\u002Fth>\u003Cth>PyTorch                                                  \u003C\u002Fth>\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.array([[1, 2], [3, 4]])\u003C\u002Fpre>                                    \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.tensor([[1, 2], [3, 4]])\u003C\u002Fpre>               \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.array([3.2, 4.3], dtype=np.float16)\nnp.float16([3.2, 4.3])\n\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.tensor([3.2, 4.3], dtype=torch.float16)\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.copy()\u003C\u002Fpre>                                                      \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.clone()\u003C\u002Fpre>                                    \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.astype(np.float32)\u003C\u002Fpre>                                          \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.type(torch.float32); x.float()\u003C\u002Fpre>             \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.fromfile(file)\u003C\u002Fpre>                                             \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.tensor(torch.Storage(file))\u003C\u002Fpre>            \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.frombuffer\u003C\u002Fpre>                                                 \u003C\u002Ftd>\u003Ctd>                                                         \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.fromfunction\u003C\u002Fpre>                                               \u003C\u002Ftd>\u003Ctd>                                                         \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.fromiter\u003C\u002Fpre>                                                   \u003C\u002Ftd>\u003Ctd>                                                         \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.fromstring\u003C\u002Fpre>                                                 \u003C\u002Ftd>\u003Ctd>                                                         \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.load\u003C\u002Fpre>                                                       \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.load\u003C\u002Fpre>                                   \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.loadtxt\u003C\u002Fpre>                                                    \u003C\u002Ftd>\u003Ctd>                                                         \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.concatenate\u003C\u002Fpre>                                                \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.cat\u003C\u002Fpre>                                    \u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2>Numerical ranges\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Numpy                           \u003C\u002Fth>\u003Cth>PyTorch                            \u003C\u002Fth>\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.arange(10)\u003C\u002Fpre>       \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.arange(10)\u003C\u002Fpre>       \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.arange(2, 3, 0.1)\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.arange(2, 3, 0.1)\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.linspace\u003C\u002Fpre>         \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.linspace\u003C\u002Fpre>         \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.logspace\u003C\u002Fpre>         \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.logspace\u003C\u002Fpre>         \u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2>Linear algebra\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Numpy                   \u003C\u002Fth>\u003Cth>PyTorch                                                                                                     \u003C\u002Fth>\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.dot\u003C\u002Fpre>      \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.dot   # 1D arrays only\ntorch.mm    # 2D arrays only\ntorch.mv    # matrix-vector (2D x 1D)\n\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.matmul\u003C\u002Fpre>   \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.matmul\u003C\u002Fpre>                                                                                    \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.tensordot\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.tensordot\u003C\u002Fpre>                                                                                 \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.einsum\u003C\u002Fpre>   \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.einsum\u003C\u002Fpre>                                                                                    \u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2>Building matrices\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Numpy              \u003C\u002Fth>\u003Cth>PyTorch               \u003C\u002Fth>\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.diag\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.diag\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.tril\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.tril\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.triu\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.triu\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2>Attributes\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Numpy                \u003C\u002Fth>\u003Cth>PyTorch                      \u003C\u002Fth>\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.shape\u003C\u002Fpre>  \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.shape; x.size()\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.strides\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.stride()\u003C\u002Fpre>       \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.ndim\u003C\u002Fpre>   \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.dim()\u003C\u002Fpre>          \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.data\u003C\u002Fpre>   \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.data\u003C\u002Fpre>           \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.size\u003C\u002Fpre>   \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.nelement()\u003C\u002Fpre>     \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.dtype\u003C\u002Fpre>  \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.dtype\u003C\u002Fpre>          \u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2>Indexing\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Numpy                          \u003C\u002Fth>\u003Cth>PyTorch                                             \u003C\u002Fth>\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx[0]\u003C\u002Fpre>               \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx[0]\u003C\u002Fpre>                                    \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx[:, 0]\u003C\u002Fpre>            \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx[:, 0]\u003C\u002Fpre>                                 \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx[indices]\u003C\u002Fpre>         \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx[indices]\u003C\u002Fpre>                              \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.take(x, indices)\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.take(x, torch.LongTensor(indices))\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx[x != 0]\u003C\u002Fpre>          \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx[x != 0]\u003C\u002Fpre>                               \u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2>Shape manipulation\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Numpy                                                                            \u003C\u002Fth>\u003Cth>PyTorch                                                                                                                     \u003C\u002Fth>\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.reshape\u003C\u002Fpre>                                                            \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.reshape; x.view\u003C\u002Fpre>                                                                                               \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.resize()\u003C\u002Fpre>                                                           \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.resize_\u003C\u002Fpre>                                                                                                       \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>                                                                                 \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.resize_as_\u003C\u002Fpre>                                                                                                    \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx = np.arange(6).reshape(3, 2, 1)\nx.transpose(2, 0, 1)  # 012 -> 201\n\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx = torch.arange(6).reshape(3, 2, 1)\nx.permute(2, 0, 1); x.transpose(1, 2).transpose(0, 1)  # 012 -> 021 -> 201\n\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.flatten\u003C\u002Fpre>                                                            \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.view(-1)\u003C\u002Fpre>                                                                                                      \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.squeeze()\u003C\u002Fpre>                                                          \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.squeeze()\u003C\u002Fpre>                                                                                                     \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx[:, None]; np.expand_dims(x, 1)\u003C\u002Fpre>                                     \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx[:, None]; x.unsqueeze(1)\u003C\u002Fpre>                                                                                      \u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2>Item selection and manipulation\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Numpy                                                                                                  \u003C\u002Fth>\u003Cth>PyTorch                                                                                                                                                                                            \u003C\u002Fth>\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.put\u003C\u002Fpre>                                                                                     \u003C\u002Ftd>\u003Ctd>                                                                                                                                                                                                   \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.put\u003C\u002Fpre>                                                                                      \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.put_\u003C\u002Fpre>                                                                                                                                                                                 \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx = np.array([1, 2, 3])\nx.repeat(2)  # [1, 1, 2, 2, 3, 3]\n\u003C\u002Fpre>                                 \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx = torch.tensor([1, 2, 3])\nx.repeat_interleave(2)  # [1, 1, 2, 2, 3, 3]\nx.repeat(2)  # [1, 2, 3, 1, 2, 3]\nx.repeat(2).reshape(2, -1).transpose(1, 0).reshape(-1)\n# [1, 1, 2, 2, 3, 3]\n\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.tile(x, (3, 2))\u003C\u002Fpre>                                                                         \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.repeat(3, 2)\u003C\u002Fpre>                                                                                                                                                                         \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx = np.array([[0, 1], [2, 3], [4, 5]])\nidxs = np.array([0, 2])\nnp.choose(idxs, x) # [0, 5]\n\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx = torch.tensor([[0, 1], [2, 3], [4, 5]])\nidxs = torch.tensor([0, 2])\nx[idxs, torch.arange(x.shape[1])] # [0, 5]\ntorch.gather(x, 0, idxs[None, :])[0] # [0, 5]\n\u003C\u002Fpre>                       \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.sort\u003C\u002Fpre>                                                                                    \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nsorted, indices = torch.sort(x, [dim])\u003C\u002Fpre>                                                                                                                                                 \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.argsort\u003C\u002Fpre>                                                                                 \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nsorted, indices = torch.sort(x, [dim])\u003C\u002Fpre>                                                                                                                                                 \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.nonzero\u003C\u002Fpre>                                                                                 \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.nonzero\u003C\u002Fpre>                                                                                                                                                                          \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.where\u003C\u002Fpre>                                                                                   \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.where\u003C\u002Fpre>                                                                                                                                                                            \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx[::-1]\u003C\u002Fpre>                                                                                    \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.flip(x, [0])\u003C\u002Fpre>                                                                                                                                                                     \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.unique(x)\u003C\u002Fpre>                                                                               \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.unique(x)\u003C\u002Fpre>                                                                                                                                                                        \u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2>Calculation\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Numpy                    \u003C\u002Fth>\u003Cth>PyTorch                              \u003C\u002Fth>\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.min\u003C\u002Fpre>        \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.min\u003C\u002Fpre>                    \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.argmin\u003C\u002Fpre>     \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.argmin\u003C\u002Fpre>                 \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.max\u003C\u002Fpre>        \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.max\u003C\u002Fpre>                    \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.argmax\u003C\u002Fpre>     \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.argmax\u003C\u002Fpre>                 \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.clip\u003C\u002Fpre>       \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.clamp\u003C\u002Fpre>                  \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.round\u003C\u002Fpre>      \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.round\u003C\u002Fpre>                  \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.floor(x)\u003C\u002Fpre>  \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.floor(x); x.floor()\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.ceil(x)\u003C\u002Fpre>   \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.ceil(x); x.ceil()\u003C\u002Fpre>  \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.trace\u003C\u002Fpre>      \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.trace\u003C\u002Fpre>                  \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.sum\u003C\u002Fpre>        \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.sum\u003C\u002Fpre>                    \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.sum(axis=0)\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.sum(0)\u003C\u002Fpre>                 \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.cumsum\u003C\u002Fpre>     \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.cumsum\u003C\u002Fpre>                 \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.mean\u003C\u002Fpre>       \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.mean\u003C\u002Fpre>                   \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.std\u003C\u002Fpre>        \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.std\u003C\u002Fpre>                    \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.prod\u003C\u002Fpre>       \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.prod\u003C\u002Fpre>                   \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.cumprod\u003C\u002Fpre>    \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.cumprod\u003C\u002Fpre>                \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.all\u003C\u002Fpre>        \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.all\u003C\u002Fpre>                    \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.any\u003C\u002Fpre>        \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.any\u003C\u002Fpre>                    \u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2>Arithmetic and comparison operations\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Numpy                       \u003C\u002Fth>\u003Cth>PyTorch         \u003C\u002Fth>\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.less\u003C\u002Fpre>         \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.lt\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.less_equal\u003C\u002Fpre>   \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.le\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.greater\u003C\u002Fpre>      \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.gt\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.greater_equal\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.ge\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.equal\u003C\u002Fpre>        \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.eq\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.not_equal\u003C\u002Fpre>    \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.ne\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2>Random numbers\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Numpy                               \u003C\u002Fth>\u003Cth>PyTorch                      \u003C\u002Fth>\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.random.seed\u003C\u002Fpre>          \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.manual_seed\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.random.permutation(5)\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.randperm(5)\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2>Numerical operations\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Numpy              \u003C\u002Fth>\u003Cth>PyTorch               \u003C\u002Fth>\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.sign\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.sign\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.sqrt\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.sqrt\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\n","\u003C!-- 请勿手动编辑此文件。此文件由 generate_readme.py 根据 conversions.yaml 生成，请编辑并运行该脚本。 -->\n# PyTorch 用于 NumPy 用户。\n\n![ci](https:\u002F\u002Fgithub.com\u002Fwkentaro\u002Fpytorch-for-numpy-users\u002Fworkflows\u002Fci\u002Fbadge.svg)\n![gh-pages](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fdeployments\u002Fwkentaro\u002Fpytorch-for-numpy-users\u002Fgithub-pages?label=gh-pages)\n\n\n[_Torch for Numpy users_](https:\u002F\u002Fgithub.com\u002Ftorch\u002Ftorch7\u002Fwiki\u002FTorch-for-Numpy-users) 的 [PyTorch](https:\u002F\u002Fgithub.com\u002Fpytorch\u002Fpytorch.git) 版本。  \n我们假设您使用的是最新版本的 PyTorch 和 NumPy。\n\n\n## 如何贡献？\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fwkentaro\u002Fpytorch-for-numpy-users.git\ncd pytorch-for-numpy-users\nvim conversions.yaml\ngit commit -m \"更新 conversions.yaml\"\n\n.\u002Frun_tests.py\n```\n\n\u003Ch2>类型\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Numpy                 \u003C\u002Fth>\u003Cth>PyTorch                                \u003C\u002Fth>\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.ndarray\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.Tensor\u003C\u002Fpre>               \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.float32\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.float32; torch.float\u003C\u002Fpre> \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.float64\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.float64; torch.double\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.float16\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.float16; torch.half\u003C\u002Fpre>  \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.int8\u003C\u002Fpre>   \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.int8\u003C\u002Fpre>                 \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.uint8\u003C\u002Fpre>  \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.uint8\u003C\u002Fpre>                \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.int16\u003C\u002Fpre>  \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.int16; torch.short\u003C\u002Fpre>   \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.int32\u003C\u002Fpre>  \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.int32; torch.int\u003C\u002Fpre>     \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.int64\u003C\u002Fpre>  \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.int64; torch.long\u003C\u002Fpre>    \u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2>全一和全零\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Numpy                       \u003C\u002Fth>\u003Cth>PyTorch                        \u003C\u002Fth>\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.empty((2, 3))\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.empty(2, 3)\u003C\u002Fpre>  \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.empty_like(x)\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.empty_like(x)\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.eye\u003C\u002Fpre>          \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.eye\u003C\u002Fpre>          \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.identity\u003C\u002Fpre>     \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.eye\u003C\u002Fpre>          \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.ones\u003C\u002Fpre>         \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.ones\u003C\u002Fpre>         \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.ones_like\u003C\u002Fpre>    \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.ones_like\u003C\u002Fpre>    \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.zeros\u003C\u002Fpre>        \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.zeros\u003C\u002Fpre>        \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.zeros_like\u003C\u002Fpre>   \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.zeros_like\u003C\u002Fpre>   \u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2>从现有数据创建\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Numpy                                                                     \u003C\u002Fth>\u003Cth>PyTorch                                                  \u003C\u002Fth>\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.array([[1, 2], [3, 4]])\u003C\u002Fpre>                                    \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.tensor([[1, 2], [3, 4]])\u003C\u002Fpre>               \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.array([3.2, 4.3], dtype=np.float16)\nnp.float16([3.2, 4.3])\n\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.tensor([3.2, 4.3], dtype=torch.float16)\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.copy()\u003C\u002Fpre>                                                      \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.clone()\u003C\u002Fpre>                                    \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.astype(np.float32)\u003C\u002Fpre>                                          \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.type(torch.float32); x.float()\u003C\u002Fpre>             \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.fromfile(file)\u003C\u002Fpre>                                             \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.tensor(torch.Storage(file))\u003C\u002Fpre>            \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.frombuffer\u003C\u002Fpre>                                                 \u003C\u002Ftd>\u003Ctd>                                                         \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.fromfunction\u003C\u002Fpre>                                               \u003C\u002Ftd>\u003Ctd>                                                         \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.fromiter\u003C\u002Fpre>                                                   \u003C\u002Ftd>\u003Ctd>                                                         \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.fromstring\u003C\u002Fpre>                                                 \u003C\u002Ftd>\u003Ctd>                                                         \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.load\u003C\u002Fpre>                                                       \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.load\u003C\u002Fpre>                                   \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.loadtxt\u003C\u002Fpre>                                                    \u003C\u002Ftd>\u003Ctd>                                                         \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.concatenate\u003C\u002Fpre>                                                \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.cat\u003C\u002Fpre>                                    \u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2>数值范围\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Numpy                           \u003C\u002Fth>\u003Cth>PyTorch                            \u003C\u002Fth>\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.arange(10)\u003C\u002Fpre>       \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.arange(10)\u003C\u002Fpre>       \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.arange(2, 3, 0.1)\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.arange(2, 3, 0.1)\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.linspace\u003C\u002Fpre>         \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.linspace\u003C\u002Fpre>         \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.logspace\u003C\u002Fpre>         \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.logspace\u003C\u002Fpre>         \u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2>线性代数\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Numpy                   \u003C\u002Fth>\u003Cth>PyTorch                                                                                                     \u003C\u002Fth>\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.dot\u003C\u002Fpre>      \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.dot   # 仅限一维数组\ntorch.mm    # 仅限二维数组\ntorch.mv    # 矩阵-向量（2D x 1D）\n\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.matmul\u003C\u002Fpre>   \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.matmul\u003C\u002Fpre>                                                                                    \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.tensordot\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.tensordot\u003C\u002Fpre>                                                                                 \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.einsum\u003C\u002Fpre>   \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.einsum\u003C\u002Fpre>                                                                                    \u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2>构建矩阵\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Numpy              \u003C\u002Fth>\u003Cth>PyTorch               \u003C\u002Fth>\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.diag\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.diag\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.tril\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.tril\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.triu\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.triu\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2>属性\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Numpy                \u003C\u002Fth>\u003Cth>PyTorch                      \u003C\u002Fth>\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.shape\u003C\u002Fpre>  \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.shape; x.size()\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.strides\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.stride()\u003C\u002Fpre>       \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.ndim\u003C\u002Fpre>   \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.dim()\u003C\u002Fpre>          \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.data\u003C\u002Fpre>   \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.data\u003C\u002Fpre>           \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.size\u003C\u002Fpre>   \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.nelement()\u003C\u002Fpre>     \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.dtype\u003C\u002Fpre>  \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.dtype\u003C\u002Fpre>          \u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2>索引\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Numpy                          \u003C\u002Fth>\u003Cth>PyTorch                                             \u003C\u002Fth>\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx[0]\u003C\u002Fpre>               \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx[0]\u003C\u002Fpre>                                    \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx[:, 0]\u003C\u002Fpre>            \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx[:, 0]\u003C\u002Fpre>                                 \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx[indices]\u003C\u002Fpre>         \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx[indices]\u003C\u002Fpre>                              \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.take(x, indices)\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.take(x, torch.LongTensor(indices))\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx[x != 0]\u003C\u002Fpre>          \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx[x != 0]\u003C\u002Fpre>                               \u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2>形状操作\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Numpy                                                                            \u003C\u002Fth>\u003Cth>PyTorch                                                                                                                     \u003C\u002Fth>\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.reshape\u003C\u002Fpre>                                                            \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.reshape; x.view\u003C\u002Fpre>                                                                                               \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.resize()\u003C\u002Fpre>                                                           \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.resize_\u003C\u002Fpre>                                                                                                       \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>                                                                                 \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.resize_as_\u003C\u002Fpre>                                                                                                    \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx = np.arange(6).reshape(3, 2, 1)\nx.transpose(2, 0, 1)  # 012 -> 201\n\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx = torch.arange(6).reshape(3, 2, 1)\nx.permute(2, 0, 1); x.transpose(1, 2).transpose(0, 1)  # 012 -> 021 -> 201\n\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.flatten\u003C\u002Fpre>                                                            \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.view(-1)\u003C\u002Fpre>                                                                                                      \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.squeeze()\u003C\u002Fpre>                                                          \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.squeeze()\u003C\u002Fpre>                                                                                                     \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx[:, None]; np.expand_dims(x, 1)\u003C\u002Fpre>                                     \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx[:, None]; x.unsqueeze(1)\u003C\u002Fpre>                                                                                      \u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2>元素选择与操作\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Numpy                                                                                                  \u003C\u002Fth>\u003Cth>PyTorch                                                                                                                                                                                            \u003C\u002Fth>\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.put\u003C\u002Fpre>                                                                                     \u003C\u002Ftd>\u003Ctd>                                                                                                                                                                                                   \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.put\u003C\u002Fpre>                                                                                      \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.put_\u003C\u002Fpre>                                                                                                                                                                                 \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx = np.array([1, 2, 3])\nx.repeat(2)  # [1, 1, 2, 2, 3, 3]\n\u003C\u002Fpre>                                 \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx = torch.tensor([1, 2, 3])\nx.repeat_interleave(2)  # [1, 1, 2, 2, 3, 3]\nx.repeat(2)  # [1, 2, 3, 1, 2, 3]\nx.repeat(2).reshape(2, -1).transpose(1, 0).reshape(-1)\n\n# [1, 1, 2, 2, 3, 3]\n\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.tile(x, (3, 2))\u003C\u002Fpre>                                                                         \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.repeat(3, 2)\u003C\u002Fpre>                                                                                                                                                                         \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx = np.array([[0, 1], [2, 3], [4, 5]])\nidxs = np.array([0, 2])\nnp.choose(idxs, x) # [0, 5]\n\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx = torch.tensor([[0, 1], [2, 3], [4, 5]])\nidxs = torch.tensor([0, 2])\nx[idxs, torch.arange(x.shape[1])] # [0, 5]\ntorch.gather(x, 0, idxs[None, :])[0] # [0, 5]\n\u003C\u002Fpre>                       \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.sort\u003C\u002Fpre>                                                                                    \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nsorted, indices = torch.sort(x, [dim])\u003C\u002Fpre>                                                                                                                                                 \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.argsort\u003C\u002Fpre>                                                                                 \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nsorted, indices = torch.sort(x, [dim])\u003C\u002Fpre>                                                                                                                                                 \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.nonzero\u003C\u002Fpre>                                                                                 \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.nonzero\u003C\u002Fpre>                                                                                                                                                                          \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.where\u003C\u002Fpre>                                                                                   \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.where\u003C\u002Fpre>                                                                                                                                                                            \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx[::-1]\u003C\u002Fpre>                                                                                    \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.flip(x, [0])\u003C\u002Fpre>                                                                                                                                                                     \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.unique(x)\u003C\u002Fpre>                                                                               \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.unique(x)\u003C\u002Fpre>                                                                                                                                                                        \u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2>计算\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Numpy                    \u003C\u002Fth>\u003Cth>PyTorch                              \u003C\u002Fth>\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.min\u003C\u002Fpre>        \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.min\u003C\u002Fpre>                    \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.argmin\u003C\u002Fpre>     \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.argmin\u003C\u002Fpre>                 \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.max\u003C\u002Fpre>        \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.max\u003C\u002Fpre>                    \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.argmax\u003C\u002Fpre>     \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.argmax\u003C\u002Fpre>                 \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.clip\u003C\u002Fpre>       \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.clamp\u003C\u002Fpre>                  \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.round\u003C\u002Fpre>      \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.round\u003C\u002Fpre>                  \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.floor(x)\u003C\u002Fpre>  \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.floor(x); x.floor()\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.ceil(x)\u003C\u002Fpre>   \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.ceil(x); x.ceil()\u003C\u002Fpre>  \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.trace\u003C\u002Fpre>      \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.trace\u003C\u002Fpre>                  \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.sum\u003C\u002Fpre>        \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.sum\u003C\u002Fpre>                    \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.sum(axis=0)\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.sum(0)\u003C\u002Fpre>                 \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.cumsum\u003C\u002Fpre>     \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.cumsum\u003C\u002Fpre>                 \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.mean\u003C\u002Fpre>       \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.mean\u003C\u002Fpre>                   \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.std\u003C\u002Fpre>        \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.std\u003C\u002Fpre>                    \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.prod\u003C\u002Fpre>       \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.prod\u003C\u002Fpre>                   \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.cumprod\u003C\u002Fpre>    \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.cumprod\u003C\u002Fpre>                \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.all\u003C\u002Fpre>        \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.all\u003C\u002Fpre>                    \u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nx.any\u003C\u002Fpre>        \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.any\u003C\u002Fpre>                    \u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2>算术与比较运算\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Numpy                       \u003C\u002Fth>\u003Cth>PyTorch         \u003C\u002Fth>\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.less\u003C\u002Fpre>         \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.lt\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.less_equal\u003C\u002Fpre>   \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.le\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.greater\u003C\u002Fpre>      \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.gt\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.greater_equal\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.ge\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.equal\u003C\u002Fpre>        \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.eq\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.not_equal\u003C\u002Fpre>    \u003C\u002Ftd>\u003Ctd>\u003Cpre>\nx.ne\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2>随机数\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Numpy                               \u003C\u002Fth>\u003Cth>PyTorch                      \u003C\u002Fth>\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.random.seed\u003C\u002Fpre>          \u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.manual_seed\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.random.permutation(5)\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.randperm(5)\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2>数值运算\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>Numpy              \u003C\u002Fth>\u003Cth>PyTorch               \u003C\u002Fth>\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.sign\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.sign\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Cpre>\nnp.sqrt\u003C\u002Fpre>\u003C\u002Ftd>\u003Ctd>\u003Cpre>\ntorch.sqrt\u003C\u002Fpre>\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>","# PyTorch for Numpy Users 快速上手指南\n\n本指南旨在帮助熟悉 NumPy 的开发者快速迁移到 PyTorch，通过对照表形式展示两者在数据类型、数组创建、线性代数及形状操作等方面的等价用法。\n\n## 环境准备\n\n在开始之前，请确保您的开发环境满足以下要求：\n\n*   **操作系统**：Linux, macOS 或 Windows\n*   **Python 版本**：建议 Python 3.8 及以上\n*   **前置依赖**：\n    *   `numpy` (最新稳定版)\n    *   `torch` (最新稳定版，建议包含 CUDA 支持以加速计算)\n\n> **国内加速建议**：\n> 推荐使用清华源或阿里源安装依赖，以提升下载速度：\n> ```bash\n> pip install numpy torch -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n> ```\n\n## 安装步骤\n\n本项目主要是一份参考文档（Cheat Sheet），无需单独安装库即可使用其中的对照知识。若您想贡献内容或运行本地测试，可克隆仓库：\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fwkentaro\u002Fpytorch-for-numpy-users.git\ncd pytorch-for-numpy-users\n```\n\n若需运行测试验证转换规则：\n\n```bash\n.\u002Frun_tests.py\n```\n\n## 基本使用\n\n核心用法是将您熟悉的 NumPy 代码直接映射为对应的 PyTorch 代码。以下是常用场景的快速对照示例。\n\n### 1. 导入与基础类型\n```python\nimport numpy as np\nimport torch\n\n# NumPy: 创建数组\nx_np = np.array([1, 2, 3], dtype=np.float32)\n\n# PyTorch: 创建张量 (等价操作)\nx_pt = torch.tensor([1, 2, 3], dtype=torch.float32) \n# 或者简写为: torch.tensor([1, 2, 3], dtype=torch.float)\n```\n\n### 2. 创建特殊矩阵 (Ones and Zeros)\n```python\n# NumPy\nzeros_np = np.zeros((2, 3))\nones_np = np.ones_like(x_np)\neye_np = np.eye(3)\n\n# PyTorch (函数名基本一致)\nzeros_pt = torch.zeros(2, 3)\nones_pt = torch.ones_like(x_pt)\neye_pt = torch.eye(3)\n```\n\n### 3. 形状操作 (Shape Manipulation)\n```python\n# NumPy: 重塑与转置\nx_np = np.arange(6).reshape(3, 2)\ntransposed_np = x_np.T # 或 x_np.transpose(1, 0)\n\n# PyTorch: view\u002Freshape 与 permute\nx_pt = torch.arange(6).reshape(3, 2)\n# view 和 reshape 类似，permute 用于多维转置\ntransposed_pt = x_pt.t() # 2D 转置\n# 多维转置: x_pt.permute(1, 0)\n\n# NumPy: 增加维度\nexpanded_np = x_np[:, None] \n\n# PyTorch: unsqueeze\nexpanded_pt = x_pt.unsqueeze(1)\n```\n\n### 4. 线性代数 (Linear Algebra)\n```python\n# NumPy\na_np = np.array([[1, 2], [3, 4]])\nb_np = np.array([[5, 6], [7, 8]])\ndot_np = np.dot(a_np, b_np) # 或 np.matmul\n\n# PyTorch\na_pt = torch.tensor([[1, 2], [3, 4]])\nb_pt = torch.tensor([[5, 6], [7, 8]])\n# torch.mm 仅用于 2D, torch.matmul 通用\ndot_pt = torch.matmul(a_pt, b_pt) \n```\n\n### 5. 索引与切片 (Indexing)\n大部分切片语法完全通用：\n```python\n# 通用语法\nval = x_pt[0]       # 第一个元素\ncol = x_pt[:, 0]    # 第一列\nmask = x_pt[x_pt > 0] # 布尔索引\n\n# 差异点：take 操作\n# NumPy: np.take(x, indices)\n# PyTorch: torch.take(x, torch.LongTensor(indices))\n```\n\n### 6. 属性访问 (Attributes)\n| 功能 | NumPy | PyTorch |\n| :--- | :--- | :--- |\n| 形状 | `x.shape` | `x.shape` 或 `x.size()` |\n| 维度数 | `x.ndim` | `x.dim()` |\n| 数据类型 | `x.dtype` | `x.dtype` |\n| 元素总数 | `x.size` | `x.nelement()` |\n| 步长 | `x.strides` | `x.stride()` |\n\n通过以上对照，您可以迅速将现有的 NumPy 数据处理逻辑转换为 PyTorch 张量操作，从而利用 GPU 加速和自动微分功能进行深度学习开发。","一位习惯使用 NumPy 进行数据预处理的数据科学家，在尝试将现有代码迁移到 PyTorch 深度学习框架时遇到了语法障碍。\n\n### 没有 pytorch-for-numpy-users 时\n- **思维转换成本高**：开发者必须频繁查阅文档，才能记住 `np.array` 对应 `torch.tensor`，或 `x.copy()` 对应 `x.clone()` 等细微差异，打断编码心流。\n- **类型映射易出错**：在处理精度敏感任务时，容易混淆 `np.float32` 与 `torch.float32`（或 `torch.float`）的写法，导致模型训练出现隐式类型错误。\n- **重构效率低下**：将成熟的 NumPy 数据处理流水线改写为 PyTorch 版本时，需要逐行手动翻译创建全零\u002F全一张量（如 `zeros` vs `torch.zeros`）的基础代码，耗时且枯燥。\n- **学习曲线陡峭**：团队中擅长数值计算但不熟悉深度学习的成员，因不熟悉 PyTorch 特有的 API 命名习惯而产生畏难情绪，阻碍技术栈统一。\n\n### 使用 pytorch-for-numpy-users 后\n- **实现无缝思维迁移**：开发者可直接参照对照表，将熟悉的 NumPy 直觉瞬间转化为正确的 PyTorch 代码，无需反复确认基础 API 名称。\n- **精准掌握类型系统**：通过清晰的类型映射表（如 `np.int64` 对应 `torch.long`），快速修正数据类型定义，确保张量运算的数值稳定性。\n- **加速代码重构进程**：利用工具提供的“从现有数据创建”及“全零\u002F全一”操作对照，几分钟内即可完成原本需数小时的数据加载层改造。\n- **降低团队协作门槛**：新成员凭借已有的 NumPy 经验，借助该指南能迅速上手 PyTorch 开发，大幅缩短项目磨合期。\n\npytorch-for-numpy-users 核心价值在于它充当了高效的“语法翻译器”，让开发者能复用现有的数值计算思维，以最低成本平滑过渡到 PyTorch 生态。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fwkentaro_pytorch-for-numpy-users_7081a793.png","wkentaro","Kentaro Wada","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fwkentaro_5710cee7.jpg","Building intelligence to automate more.","@mujin","Tokyo, Japan",null,"wkentaro_","https:\u002F\u002Fwkentaro.com","https:\u002F\u002Fgithub.com\u002Fwkentaro",[84,88],{"name":85,"color":86,"percentage":87},"HTML","#e34c26",81.3,{"name":89,"color":90,"percentage":91},"Python","#3572A5",18.7,705,88,"2026-03-12T04:08:51","MIT",1,"","未说明",{"notes":100,"python":101,"dependencies":102},"该工具并非独立软件，而是一份针对熟悉 NumPy 用户的 PyTorch 语法对照指南。它假设用户已安装最新版本的 PyTorch 和 NumPy。运行测试脚本需要 Python 环境及 git。无特定操作系统、GPU 或内存限制，具体取决于用户安装的 PyTorch 版本及其运行环境。","未说明 (仅提及使用最新版)",[103,104],"torch (最新版)","numpy (最新版)",[14],[107,108],"pytorch","numpy","2026-03-27T02:49:30.150509","2026-04-07T03:52:49.591353",[112,117,122,127,131,136],{"id":113,"question_zh":114,"answer_zh":115,"source_url":116},20949,"PyTorch 中是否有类似 NumPy 的 tensor.shape 属性？","是的，PyTorch 支持 tensor.shape。如果您发现无法使用该属性，可能是因为您使用的 PyTorch 版本过旧（例如 1.0.1 之前的版本）。建议升级到较新的 PyTorch 版本以获取完整的功能支持。在旧版本中，通常使用 tensor.size() 来获取形状信息。","https:\u002F\u002Fgithub.com\u002Fwkentaro\u002Fpytorch-for-numpy-users\u002Fissues\u002F11",{"id":118,"question_zh":119,"answer_zh":120,"source_url":121},20950,"为什么我的测试脚本显示通过，但实际上测试失败了？","这通常是因为测试运行脚本（如 run_tests.py）中存在 Bug。具体来说，脚本调用了 pytest CLI 但吞掉了退出代码（exit code），导致无论测试是否失败，脚本总是以 0（成功）状态退出。您需要修改脚本以正确捕获并返回 pytest 的退出状态码，确保持续集成（CI）能准确反映测试结果。","https:\u002F\u002Fgithub.com\u002Fwkentaro\u002Fpytorch-for-numpy-users\u002Fissues\u002F13",{"id":123,"question_zh":124,"answer_zh":125,"source_url":126},20951,"如何为旧版本的 PyTorch（如 0.4）添加支持？","可以通过提交 Pull Request (PR) 来添加对旧版本的支持。主要改动包括适配 API 差异，例如在 PyTorch 0.4 中不再直接使用 LongTensor，而是改用 tensor(x, dtype=torch.long) 的方式创建张量。维护者通常欢迎此类贡献以提升库的兼容性。","https:\u002F\u002Fgithub.com\u002Fwkentaro\u002Fpytorch-for-numpy-users\u002Fissues\u002F4",{"id":128,"question_zh":129,"answer_zh":130,"source_url":121},20952,"执行 transpose 或 permute 操作时出现维度不匹配错误怎么办？","该错误通常是因为代码假设操作对象是 3D 数组，但实际输入的是 2D 数组（例如 shape 为 [2, 3] 的矩阵）。NumPy 和 PyTorch 的 transpose\u002Fpermute 需要指定与数组维度数量一致的轴参数。请检查输入数据的维度，确保传递的轴索引数量与数据实际维度相匹配，或者先将数据 reshape 为预期的维度。",{"id":132,"question_zh":133,"answer_zh":134,"source_url":135},20953,"项目中缺少 LICENSE 文件，如何获取授权信息？","如果仓库根目录下缺少 LICENSE 文件，您可以查看项目的提交历史或维护者的修复记录。维护者通常会在收到反馈后迅速添加标准的 License 文件（如 MIT 或 Apache 2.0）。在该项目中，维护者已通过特定提交（commit）添加了许可证文件，您可以直接拉取最新代码获取。","https:\u002F\u002Fgithub.com\u002Fwkentaro\u002Fpytorch-for-numpy-users\u002Fissues\u002F16",{"id":137,"question_zh":138,"answer_zh":139,"source_url":121},20954,"如何定位导致测试失败的具体代码提交？","可以使用 git bisect 工具来二分查找引入问题的具体提交。首先标记一个已知良好的版本（git bisect good）和一个已知包含错误的版本（git bisect bad），然后让 git 自动切换版本并运行测试，直到定位到第一个导致失败的提交哈希值（例如 f1d992d...）。",[]]