ndarray的創建(小白五分鐘從入門到精通)

ndarray的創建

用途

方法

語法示例

核心作用

輸出示例

基礎構造

? 從?Python 數據結構創建

np.array()

np.array([[1, 2], [3, 4]])

將列表/元組轉換為?ndarray

array([[1, 2], [3, 4]])

? 復制數組

np.copy()

np.copy(arr)

創建獨立副本(深拷貝)

與原數組相同但不共享內存

預定義形狀填充

? 全0數組

np.zeros()

np.zeros((2,3))

快速初始化全0數組

[[0., 0., 0.], [0., 0., 0.]]

? 全1數組

np.ones()

np.ones((3,2), dtype=int)

快速初始化全1數組

[[1, 1], [1, 1], [1, 1]]

? 未初始化數組

np.empty()

np.empty((2,2))

預分配內存(值隨機)

隨機值(如?[[1e-323, 0.], [0., 0.]]

? 填充固定值

np.full()

np.full((2,3), 5)

用指定值填充數組

[[5, 5, 5], [5, 5, 5]]

基于數值范圍生成

? 等差序列

np.arange()

np.arange(0, 10, 2)

生成步長固定的序列(不含終點)

[0, 2, 4, 6, 8]

? 等間隔序列

np.linspace()

np.linspace(0, 1, 5)

生成指定數量的等間隔值(含終點)

[0.0, 0.25, 0.5, 0.75, 1.0]

? 對數間隔序列

np.logspace()

np.logspace(0, 2, 3, base=10)

生成對數間隔值(如?10^0, 10^1, 10^2

[1.0, 10.0, 100.0]

特殊矩陣生成

? 單位矩陣

np.eye()

np.eye(3)

生成單位矩陣(對角線為1)

[[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]]

? 對角矩陣

np.diag()

np.diag([1, 2, 3])

生成以指定值為對角線的矩陣

[[1, 0, 0], [0, 2, 0], [0, 0, 3]]

隨機數組生成

? 均勻分布隨機數

np.random.rand()

np.random.rand(2,2)

生成?[0,1) 均勻分布的隨機數

[[0.43, 0.89], [0.21, 0.57]]

? 正態分布隨機數

np.random.randn()

np.random.randn(2,2)

生成標準正態分布隨機數(均值為0,方差為1)

[[-0.5, 1.2], [0.3, -1.8]]

? 隨機整數

np.random.randint()

np.random.randint(1,10, (2,2))

生成指定范圍內的隨機整數

[[3, 7], [5, 2]]

高級構造方法

? 從字符串創建

np.array()

np.array(['a', 'bc'])

將字符串轉換為字符數組

array(['a', 'bc'], dtype='<U2')

? 從文件讀取

np.loadtxt()

np.loadtxt('data.txt')

從文本文件加載數據

依賴文件內容(如?[[1., 2.], [3., 4.]]

? 函數生成數組

np.fromfunction()

np.fromfunction(lambda i,j: i+j, (3,3))

根據函數生成數組元素

[[0., 1., 2.], [1., 2., 3.], [2., 3., 4.]]

創建方法匯總

  1. 基礎構造:??適用于手動構建小規模數組或復制已有數據。
  1. 預定義形狀填充:??用于快速初始化固定形狀的數組(如全0占位、全1初始化)。
  1. 基于數值范圍生成:??生成數值序列,常用于模擬時間序列、坐標網格等。
  1. 特殊矩陣生成:??數學運算專用(如線性代數中的單位矩陣)。
  1. 隨機數組生成:??模擬實驗數據、初始化神經網絡權重等場景。
  1. 高級構造方法:??處理非結構化數據(如文件、字符串)或通過函數生成復雜數組。

2.2.3.1 ??Python 數據結構轉換

將?Python 列表、元組等轉換為?ndarray,是最直接的方式。

np.array(object, dtype=None)

Python
import numpy as np

# 從列表創建一維數組
arr1 = np.array([1, 2, 3])
print(arr1) ?# 輸出: [1 2 3]

# 從嵌套列表創建二維數組
arr2 = np.array([[1, 2], [3, 4]])
print(arr2)
# 輸出:
# [[1 2]
# ?[3 4]]

# 指定數據類型
arr3 = np.array([1, 2.5], dtype=np.float32)
print(arr3.dtype) ?# 輸出: float32

注意事項

  • 混合類型時,NumPy 會統一為最高優先級類型(如?int + float → float數值?+ 字符串?→ 字符串)。
  • 列表的嵌套層級決定?ndim(維度數)。

2.2.3.2 預定義形狀填充

快速初始化固定形狀的數組,常用于占位或初始化權重矩陣。

Python
np.zeros(shape, dtype=float) ?# 全0 ?返回給定形狀和類型的新數組,用0填充。
np.ones(shape, dtype=float) ??# 全1 ?返回給定形狀和類型的新數組,用1填充。

Python
# 創建?2x3 全0浮點數組
zeros_arr = np.zeros((2, 3))
print(zeros_arr)
# 輸出:
# [[0. 0. 0.]
# ?[0. 0. 0.]]

# 創建?3x2 全1整數數組
ones_arr = np.ones((3, 2), dtype=int)
print(ones_arr)
# 輸出:
# [[1 1]
# ?[1 1]
# ?[1 1]]

默認數據類型為?float64,需顯式指定?dtype?為?int?或其他類型。

未初始化的數組?(np.empty)

np.empty(shape, dtype=float)

返回給定形狀和類型的未初始化的新數組。

創建未初始化的數組(值隨機,取決于內存狀態),適用于對性能要求極高的場景。

Python
empty_arr = np.empty((2, 2))
print(empty_arr) ?# 輸出可能為隨機值(如?[[1e-323, 0. ], [0., 0. ]])

不推薦直接使用:需手動填充數據,否則可能引入不可預測的錯誤。

需要注意的是,np.empty?并不保證數組元素被初始化為?0,它只是分配內存空間,數組中的元素值是未初始化的,可能是內存中的任意值。

重復填充數組?(np.full)

np.full(shape, fill_value, dtype)

Python
full_arr = np.full((2, 3), 5)
print(full_arr)
# 輸出:
# [[5 5 5]
# ?[5 5 5]]

zeros_like()返回與給定數組具有相同形狀和類型的0新數組。

ones_like()返回與給定數組具有相同形狀和類型的1新數組。

empty_like()返回與給定數組具有相同形狀和類型的未初始化的新數組。

Plain Text
arr2?= np.ones_like(arr1) ?# 創建和arr1形狀相同的全1數組
arr4?= np.empty_like(arr3) ?# 創建和arr3形狀相同的未初始化數組
arr2?= np.full_like(arr1, 5)

2.2.3.3 基于數值范圍生成

(1) np.arange:等差序列

np.arange(start, stop, step)

返回在給定范圍內用均勻間隔的值填充的一維數組。

Python
arr = np.arange(0, 10, 2) ?# 0 ≤ 值?<10,步長2
print(arr) ?# 輸出: [0 2 4 6 8]

(2) np.linspace:等間隔數組(含終點)

np.linspace(start, stop, num=50) ?

返回指定范圍和元素個數的等差數列。數組元素類型為浮點型。

Python
arr = np.linspace(0, 1, 5) ?# 0到1之間生成5個等間隔值
print(arr) ?# 輸出: [0. ??0.25 0.5 ?0.75 1. ?]

(3) np.logspace:對數間隔數組

np.logspace(start, stop, num=50, base=10) ?

返回指定指數范圍、元素個數、底數的等比數列。

Python
arr = np.logspace(0, 2, 3) ?# 10^0, 10^1, 10^2
print(arr) ?# 輸出: [ ?1. ?10. 100.]

2.2.3.4 ?特殊矩陣

矩陣補充知識

矩陣是線性代數的核心概念,可以理解為一個數字的矩形表格,用來表示數據、方程組或線性變換。下面用最直觀的方式介紹它的基本概念和應用。

矩陣是一個由?行(row)?和?列(column)?排列成的矩形數組,例如:

  • 形狀(shape):這個矩陣有?2 行?3 列,記作?2×32×3 矩陣。
  • 元素(entry):矩陣中的每個數字稱為元素,如?A1,2=2A1,2=2(第?1 行第?2 列)。
  1. 矩陣的用途

(1) 表示線性方程組

例如,方程組:

可以寫成矩陣形式:

即?Ax=b,其中:

  • A?是系數矩陣,
  • x?是未知數列向量,
  • b?是常數項列向量。

(2) 表示線性變換

矩陣可以描述空間中的變換,比如旋轉、縮放、投影。

例如,一個?2×22×2 矩陣可以表示二維平面的旋轉:

作用在向量?[xy][xy] 上,會使其旋轉?θθ?角度。

(3) 數據表示(如機器學習)

在機器學習中,數據集通常用矩陣表示:

  • 每一行代表一個樣本(如一張圖片),
  • 每一列代表一個特征(如像素值)。
  1. 矩陣的基本運算

(1) 矩陣加法

對應位置的元素相加,要求兩個矩陣形狀相同:

(2) 矩陣數乘

矩陣的每個元素乘以一個標量(數):

(3) 矩陣乘法

矩陣乘法?不是?對應元素相乘,而是?行?× 列?的點積運算:

注意:矩陣乘法不滿足交換律(AB≠BAAB=BA)。

(4) 轉置(Transpose)

行列互換:

  1. 特殊矩陣

(1) 單位矩陣?(np.eye/np.identity)

Python
np.eye(N) ?# NxN 單位矩陣
np.identity(N)

Python
eye_arr = np.eye(3)
print(eye_arr)
# 輸出:
# [[1. 0. 0.]
# ?[0. 1. 0.]
# ?[0. 0. 1.]]

(2) 對角矩陣?(np.diag)

Python
np.diag([a, b, c]) ?# 對角線為?a, b, c,其余為0

Python
diag_arr = np.diag([1, 2, 3])
print(diag_arr)
# 輸出:
# [[1 0 0]
# ?[0 2 0]
# ?[0 0 3]]

2.2.3.5 ?隨機數組

(1) 均勻分布隨機數?(np.random.rand)

返回給定形狀的數組,用?[0, 1) 上均勻分布的隨機樣本填充。

Python
rand_arr = np.random.rand(2, 2) ?# [0,1) 均勻分布
# 輸出示例: [[0.43, 0.89], [0.21, 0.57]]

(2) 正態分布隨機數?(np.random.randn)

返回給定形狀的數組,用標準正態分布(均值為0,標準差為1)的隨機樣本填充。

Python
randn_arr = np.random.randn(2, 2) ?# 均值為0,方差為1
# 輸出示例: [[-0.5, 1.2], [0.3, -1.8]]

(3) 隨機整數?(np.random.randint)

返回給定形狀的數組,用從低位(包含)到高位(不包含)上均勻分布的隨機整數填充。

Python
int_arr = np.random.randint(1, 10, (2, 2)) ?# [1,10) 的整數
# 輸出示例: [[3, 7], [5, 2]]

(4)random.uniform()

random.uniform()返回給定形狀的數組,用從低位(包含)到高位(不包含)上均勻分布的隨機浮點數填充。

arr3?= np.random.uniform(3, 6, (2, 3))

# [[5.69275495 3.84857937 3.2899215 ]

# ?[5.32035519 3.7460973 ?3.33859905]]

(5) 設置隨機種子?(np.random.seed)

np.random.seed?是?NumPy 中用于設置**隨機數生成器種子**的函數,目的是確保程序的隨機操作可以重復生成相同的結果(即保證隨機結果的確定性)。這在實驗復現、調試和教學場景中非常有用。

Python
import numpy as np

# 設置隨機種子
np.random.seed(42) ?# 參數可以是任意整數

# 生成隨機數
print(np.random.rand(3)) ?# 輸出固定結果

每次運行上述代碼都會得到相同的隨機數序列(例如?[0.37454012, 0.95071431, 0.73199394])。

關鍵細節

  1. 種子的一致性
  • 相同種子生成的隨機數序列完全一致。
  • 不同種子(如?np.random.seed(0)?和?np.random.seed(1))會產生不同序列。
  1. 作用范圍
  • 種子對后續所有基于?NumPy 的隨機函數生效(如?np.random.rand(), np.random.normal(), np.random.shuffle()?等)。

通過控制種子,你能在“隨機”和“可復現”之間靈活切換!

2.2.3.6 高級構造方法

(1) np.loadtxt

Python
data = np.loadtxt('data.txt') ?# 讀取文本文件

(2) np.genfromtxt

Python
data = np.genfromtxt('data.csv', delimiter=',') ?# 支持復雜格式

2.2.3.7 創建方法推薦場景

場景

推薦方法

優點

快速初始化全0/全1數組

np.zeros/np.ones

內存預分配,明確值

生成數值序列

np.arange/np.linspace

靈活控制范圍和步長

創建單位矩陣或對角矩陣

np.eye/np.diag

數學運算專用

高性能預分配內存

np.empty

速度最快(需手動初始化)

隨機數據生成

np.random?模塊

模擬實驗數據

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/90076.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/90076.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/90076.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

考研數據結構Part1——單鏈表知識點總結

一、前言單鏈表是線性表的鏈式存儲結構&#xff0c;作為數據結構中最基礎也是最重要的線性結構之一&#xff0c;在考研數據結構科目中占有重要地位。本文將總結帶頭結點單鏈表的各項基本操作&#xff0c;包括初始化、插入、刪除、查找等&#xff0c;并附上完整C語言實現代碼&am…

筆試——Day15

文章目錄第一題題目思路代碼第二題題目&#xff1a;思路代碼第三題題目&#xff1a;思路代碼第一題 題目 平方數 思路 判斷?個數開根號之后左右兩個數的平?&#xff0c;哪個最近即可 代碼 第二題 題目&#xff1a; 分組 思路 枚舉所有的結果&#xff0c;找到第一個復合要…

物聯網全流程開發記錄

問題 有數據采集設備&#xff0c;服務器&#xff0c;上位機用戶顯示三部分&#xff0c;采集設備將采集的數據發送至服務器。服務器將數據保存&#xff0c;上位機讀取服務器保存的數據庫顯示。當出現多設備&#xff0c;多用戶時&#xff0c;如何通過多設備對應多用戶&#xff0c…

【LeetCode 熱題 100】46. 全排列——回溯

Problem: 46. 全排列 文章目錄整體思路完整代碼時空復雜度時間復雜度&#xff1a;O(N * N!)空間復雜度&#xff1a;O(N)整體思路 這段代碼旨在解決一個經典的組合數學問題&#xff1a;全排列 (Permutations)。給定一個不含重復數字的數組 nums&#xff0c;它需要找出其所有可能…

AXI接口學習

amba總線的發展axi協議是兩個接口之間的點對點的協議&#xff0c;主要是有5個通道。主機在寫地址&#xff08;AW&#xff09;通道上發送地址&#xff0c;并在寫數據&#xff08;W&#xff09;通道上將數據傳輸到從機。從機將接收到的數據寫入指定地址空間。從機完成寫操作&…

Validation - Spring Boot項目中參數檢驗的利器

Validation - Spring Boot項目中參數檢驗的利器 什么是Validation Sping Boot官方原文&#xff1a;When it comes to validating user input, Spring Boot provides strong support for this common, yet critical, task straight out of the box.Although Spring Boot support…

云服務器VS虛擬主機:如何抉擇?

開篇引入在當今數字化浪潮中&#xff0c;無論是個人站長想要搭建獨具風格的博客&#xff0c;展示自己的生活感悟與專業見解&#xff1b;還是中小企業期望構建官方網站&#xff0c;拓展線上業務版圖&#xff0c;提升品牌知名度&#xff1b;亦或是大型互聯網企業籌備高并發的電商…

不同相機CMOS噪點對熒光計算的影響

摘要&#xff1a;熒光成像是生物醫學、材料科學等領域的重要研究手段&#xff0c;其成像質量高度依賴傳感器噪聲特性。本文系統分析CMOS傳感器噪聲類型及其對熒光信號計算的影響機制&#xff0c;結合實驗數據探討不同CMOS架構的噪聲表現差異&#xff0c;提出針對性優化策略。研…

docker 常見命令使用記錄

1. swarm 集群 1. 集群創建 # 創建集群管理節點&#xff0c; --advertise-addr 指定節點管理通信地址&#xff0c;--data-path-addr 指定容器通信地址 docker swarm init --advertise-addr 1.14.138.35 --data-path-addr 1.14.138.35# --advertise-addr 指明當前work節點的…

KRaft 角色狀態設計模式:從狀態理解 Raft

這些狀態類是 Raft 協議行為的核心載體。它們包含轉移邏輯 和 節點在特定狀態下的所有行為和數據。QuorumState它是 KRaft 客戶端實現中狀態管理的核心&#xff0c;扮演著“狀態機上下文&#xff08;Context&#xff09;”和“狀態轉換協調者”的關鍵角色。QuorumState 是整個 …

Linux的磁盤存儲管理實操——(上)

一、Linux的設備文件分類 Linux的設備文件分類1、在Linux系統中設備文件是用來與外接交互的接口&#xff0c;它將內核中的硬件設備與文件系統關聯起來&#xff0c;讓用戶可以像操作普通文件一樣來操作硬件設備&#xff0c;同時也為開發者提供了方便而強大的應用程序接口。 2、L…

內核bpf的實現原理

bpftrace能幫我們干什么&#xff1f;1、統計 tcp連接的生命時長、2、統計mysql執行一條sql語句的時間3、統計redis執行命令的時間、 4、對文件進行一次讀或者寫的時間。 常用命令&#xff1a; bpftrace -e Begin { printf("hello\n"); } bpftrace -l *enter_accep…

前端npm配置Nexus為基礎倉庫

步驟&#xff1a; 一、Nexus倉庫配置 新增npm倉庫,具體詳解見 Nexus私有倉庫配置&#xff0c;解釋 注&#xff1a;Nexus的版本需要至少3.38以上&#xff0c;不然會出現npm install 時npm的審計功能報錯&#xff0c;導致install失敗。雖然在3.38以后不會報400錯誤&#xff0c…

數據結構 之 【排序】(直接插入排序、希爾排序)

目錄 1.直接插入排序 1.1直接插入排序的思想 1.2直接插入排序的代碼邏輯&#xff1a; 1.3 直接插入排序圖解 1.4單趟排序代碼(單個元素的排序邏輯) 1.5完整排序代碼 1.6直接插入排序的時間復雜度與空間復雜度 1.7直接插入排序的優勢 2.希爾排序(縮小增量排序) 2.1…

Laravel 后臺登錄 403 Forbidden 錯誤深度解決方案-優雅草卓伊凡|泡泡龍

Laravel 后臺登錄 403 Forbidden 錯誤深度解決方案-優雅草卓伊凡|泡泡龍一頓操作猛如虎&#xff0c;一看結果250&#xff0c;必須記錄&#xff0c;必須記錄&#xff0c;&#xff01;今天弄了很久關于我們2023年的產品系統蜻蜓T會議系統專業版&#xff0c;然后終于搞好了密碼也重…

Newline全場景方案閃耀2025中國智慧生活大會

7月15日 — 16日&#xff0c;由中國電子視像行業協會等權威機構指導的2025 CIC中國智慧生活大會在京召開。Newline作為視像協會PID分會副會長單位攜全場景智慧辦公解決方案亮相&#xff0c;首席營銷官李宇鵬受邀出席領袖圓桌環節&#xff0c;與騰訊云、京東方、創維、TCL、小猿…

Edge瀏覽器地址欄默認搜索引擎設置指南

前言 Microsoft Edge 瀏覽器允許用戶自定義地址欄默認搜索引擎&#xff0c;只是設置入口隱藏比較深&#xff0c;以版本 137.0.3296.83 (正式版本) (64 位)為例詳細記錄設置地址欄默認搜索引擎步驟&#xff1a; Edge 設置默認搜索引擎步驟 通過設置界面修改 打開Edge設置&#x…

Python eval函數詳解 - 用法、風險與安全替代方案

Python eval函數詳解 - 用法、風險與安全替代方案在Python中&#xff0c;eval() 是一個內置函數&#xff0c;用于解析并執行傳入的字符串形式的表達式。它能夠將字符串動態地轉換為有效的Python代碼并運行。雖然 eval() 功能強大&#xff0c;但其使用也伴隨著潛在的安全風險。本…

Webpack5 新特性與詳細配置指南

一、Webpack5 新特性 內置 Asset Modules&#xff08;資源模塊&#xff09; 替代 file-loader、url-loader、raw-loader 等&#xff0c;統一資源處理方式。四種類型&#xff1a;asset/resource&#xff1a;導出文件 URL&#xff08;等同 file-loader&#xff09;。asset/inli…

籠子在尋找一只鳥:解讀生活的隱形陷阱

想象一個閃閃發光的籠子&#xff0c;敞開著門&#xff0c;在世界中游蕩&#xff0c;尋找一只鳥兒。這畫面是不是有點奇怪&#xff1f;這是卡夫卡的格言“一個籠子在尋找一只鳥”帶給我們的奇思妙想。通常&#xff0c;鳥兒自由翱翔&#xff0c;籠子靜靜等待&#xff0c;但卡夫卡…