成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python生成小數序列竟如此簡單!np.arange為何碾壓range?一文徹底講透

開發 前端
用Python的range生成0.1間隔序列直接報錯?np.arange為何能輕松實現毫秒級數據生成?本文通過詳細示例,徹底揭秘range與np.arange的底層差異!

用Python的range生成0.1間隔序列直接報錯?np.arange為何能輕松實現毫秒級數據生成?本文通過詳細示例,徹底揭秘range與np.arange的底層差異!文末附數值計算避坑指南,讓你告別浮點誤差!

一、痛點直擊:range的小數步長之殤

# 經典報錯場景:試圖生成0.1步長的序列
try:
    range(0, 1, 0.1)  # 直接崩潰!
except Exception as e:
    print(f"報錯信息:{e}")  # TypeError: 'float' cannot be interpreted as an integer

# 使用np.arange輕松解決
import numpy as np
print(np.arange(0, 1, 0.1))  # 完美輸出:[0.0, 0.1, 0.2, ..., 0.9]

二、參數詳解:range和np.arange的根本差異

參數

range

np.arange

起始值(start)

僅整數

支持int/float

結束值(stop)

嚴格小于stop

可包含stop邊界(通過精度調整)

步長(step)

必須為整數

支持任意小數

返回值類型

生成惰性迭代器

生成預分配的ndarray數組

內存占用

固定48字節(動態生成)

預分配連續內存(數據量×字節大小)

三、底層機制:為何np.arange能處理小數步長?

1. C語言級優化

// NumPy底層C代碼簡化邏輯(arange實現)
npy_arange(double start, double stop, double step) {
    length = ceil((stop - start) / step);  // 計算元素數量
    arr = numpy_array_alloc(length);       // 預分配內存
    for (i=0; i<length; i++) {
        arr[i] = start + i*step;           // 直接計算存儲
    }
    return arr;
}

2. 浮點數處理策略

? 全程使用雙精度浮點運算(float64)

? 自動處理二進制截斷誤差

? 支持自定義數據類型(float32/int32等)

四、核心優勢對比表格

特性

range

np.arange

小數步長支持

? 直接報錯

? 完美支持

內存占用(1萬數據)

48字節(固定)

80KB(float64類型)

生成速度(百萬級)

0.8秒(循環遍歷)

0.02秒(向量化計算)

科學計算兼容性

? 需轉換類型

? 無縫對接Matplotlib/Pandas

數據精度控制

? 僅整數

? 支持小數點后16位

多維數據生成

? 僅一維

? 可擴展至高維網格

五、精度陷阱與避坑指南

陷阱1:浮點顯示誤差

arr = np.arange(1.1, 1.5, 0.1)
print(list(arr))
# 輸出 [1.1, 1.2000000000000002, 1.3000000000000003, 1.4000000000000004]

解決方案

# 方法1:強制類型轉換
arr = np.arange(1.1, 1.5, 0.1).astype(np.float32)
print(list(arr))

# 方法2: 四舍五入(保留兩位小數)(推薦)
arr = np.arange(1.1, 1.5, 0.1).round(2)
print(list(arr))

# 方法3:整數縮放法
arr = np.arange(11, 15, 1) / 10
print(list(arr))

陷阱2:超大范圍導致內存溢出

# 錯誤示范(生成1e12數據直接崩潰)
# arr = np.arange(0, 1e12, 0.1) 
# 需要超大內存!

# 正確方案:分塊生成器
def safe_arange(start, stop, step):
    current = start
    while current < stransform: translateY(  # 嚴格遵循左閉右開
        yield current
        current += step

# 逐塊處理
for num in safe_arange(0, 1000, 0.1):
    print(num)

陷阱3:與Python原生函數兼容問題

arr = np.arange(0.1, 0.5, 0.1)
print(0.3 in arr) 
# 返回False,原因讓我們來看一下生成的值
print(list(arr))
# 輸出 [0.1, 0.2, 0.30000000000000004, 0.4]

# 解決方案:容差判斷(也可通過陷阱1中的解決方案規避這個問題)
tol = 1e-10
print(any(abs(arr - 0.3) < tol))  
# True

陷阱4:步長參數導致空數組

# 當step方向與區間方向相反時
arr = np.arange(5.0, 1.0, 0.5)  
print(list(arr))
# [] 空數組!

# 正確寫法:
arr = np.arange(5.0, 1.0, -0.5) 
# [5.0, 4.5, 4.0, 3.5, 3.0, 2.5, 2.0, 1.5]

陷阱5:默認數據類型精度不足

arr = np.arange(0, 1, 0.1, dtype=np.float32)
print(arr[-1])  
# 0.90000004(精度丟失)

# 解決方案:強制高精度
arr = np.arange(0, 1, 0.1, dtype=np.float64)
print(arr[-1])  
# 0.9

六、為什么專業開發者都選擇np.arange?

  1. 1. IEEE 754標準支持:嚴格遵循浮點數國際標準
  2. 2. 底層C優化:避免Python解釋器的性能損耗
  3. 3. 內存預分配策略:連續內存塊提升緩存命中率
  4. 4. GPU加速兼容:生成的數組可直接送入CUDA計算
  5. 5. 應用場景廣泛:可用于 金融價格序列、科學實驗數據采樣、游戲動畫關鍵幀、地理坐標生成、物理仿真時間步、機器學習參數搜索、音頻信號處理等等場景
# 與PyTorch的無縫對接
import torch
tensor = torch.from_numpy(np.arange(0.0, 1.0, 0.1))
你在使用np.arange時踩過哪些坑?是遇到15.600000000000001的詭異數值?還是生成的數據總是少一個?
責任編輯:武曉燕 來源: 不止于python
相關推薦

2020-03-26 09:18:54

高薪本質因素

2020-07-16 09:02:45

aPaaS云計算aPaaS平臺

2020-08-04 10:56:09

進程線程協程

2024-08-13 17:09:00

架構分庫分表開發

2025-01-13 12:00:00

反射Java開發

2020-12-01 11:34:14

Elasticsear

2021-01-18 13:05:52

Serverless Serverfull FaaS

2023-05-04 08:24:52

ChatGPT產品經理工業革命

2023-11-09 08:41:25

DevOpsAIOps軟件

2024-08-07 10:54:59

正則表達式Java RegexJava

2024-05-31 13:23:19

OceanBase單機版架構

2024-07-10 12:00:42

2023-11-06 09:06:54

分布式一致性數據

2020-05-20 09:55:42

Git底層數據

2020-12-07 06:19:50

監控前端用戶

2021-07-08 10:08:03

DvaJS前端Dva

2021-06-29 12:10:00

CRC校驗碼C語言

2021-06-30 08:45:02

內存管理面試

2023-10-27 08:15:45

2022-06-07 10:13:22

前端沙箱對象
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91正在播放| 欧美aaa一级片 | 在线免费中文字幕 | 国产成人精品高清久久 | 亚洲综合中文字幕在线观看 | 久久r久久 | 免费观看国产视频在线 | 欧美在线一区二区三区 | 国产免费一区二区 | 福利视频1000| 美日韩精品 | 欧美久久久久久久久中文字幕 | 欧美精品乱码久久久久久按摩 | 亚洲va国产日韩欧美精品色婷婷 | 美女啪啪国产 | 免费观看羞羞视频网站 | 日韩精品一区二区三区在线观看 | 日韩中文字幕视频在线观看 | 久久婷婷色 | 在线一区| 岛国午夜| 国产成人精品一区二区三区视频 | 91视频免费视频 | 国产一级视频在线观看 | 欧美精品一区二区三区在线播放 | 日日夜夜天天干 | 国产在线一区观看 | 国产精品久久久久久久岛一牛影视 | 九九热最新地址 | 欧美激情五月 | h小视频 | 欧美天堂| 亚洲天堂影院 | 久久国产免费 | 亚洲一区国产 | 一级毛片成人免费看a | 国产精品免费一区二区三区四区 | 日日天天 | 在线看片福利 | 国产一区二区三区 | 国产精品高潮呻吟久久av黑人 |