Python中的解包(tuple和dict的解包、*、**)的幾種使用方法
1. 問題
為什么 np.random.randn(*images_example.shape) 中的 images_example.shape 前面需要加 *?
2. 解決問題
在 Python 里面,* 表示解包(一般是用于 List 和 Tuple),** 也是解包,但它用于 字典 Dict 的解包。因此,images_example.shape 前面的 * 其實也是解包的意思。
對于一個 tensor,它的屬性 .shape返回的是一個 Tuple(元組),但 np.random.randn() 的里面要的參數(shù)不能是一個 Tuple 對象,而應該是 int。所以這里的 * 其實就是把 Tuple 拆成了 int。
3. 例子
example_list = [1, 2, 3]
print(f"{example_list = }")
print(f"{type(example_list) = }")
print("*example_list:", *example_list)
print()
example_tuple = (1, 2, 3)
print(f"{example_list = }")
print(f"{type(example_list) = }")
print("*example_tuple:", *example_list)
結(jié)果如下:
example_list = [1, 2, 3] type(example_list) = <class 'list'> *example_list: 1 2 3 example_list = [1, 2, 3] type(example_list) = <class 'list'> *example_tuple: 1 2 3
這個例子中,我們看到:
[1, 2, 3]經(jīng)過*后變?yōu)榱?1 2 3這樣很詭異的樣子(1, 2, 3)經(jīng)過*后變?yōu)榱?1 2 3這樣很詭異的樣子
為什么說它"詭異"呢?
因為它的類型是不能求的,會報錯:
tuple = (1, 2, 3)
print("type(*tuple):", type(*tuple))
結(jié)果如下:
Traceback (most recent call last):
File "C:\Users\Leovin\Desktop\Desktop\pytorch\books\src\leovin\Encoder & Decoder\Exp_3.py", line 2, in <module>
print("type(*tuple):", type(*tuple))
TypeError: type.__new__() argument 1 must be str, not int
那么 1 2 3 這種詭異的形式放到 np.random.randn() 中會怎么樣?那么是分批放入,還是一起放入?我們做一個驗證就可以知道了:
import numpy as np
a = (1, 2, 3)
np.random.seed(42)
A = np.random.randn(*a)
np.random.seed(42)
B = np.random.randn(1, 2, 3)
print(f"{A = }")
print(f"{B = }")
結(jié)果如下:
A = array([[[ 0.49671415, -0.1382643 , 0.64768854],
[ 1.52302986, -0.23415337, -0.23413696]]])
B = array([[[ 0.49671415, -0.1382643 , 0.64768854],
[ 1.52302986, -0.23415337, -0.23413696]]])
那么,答案很清晰了。(1, 2, 3) 這個 Tuple 被拆成了 1 2 3,是按照 1, 2, 3 這樣的樣子放進 np.random.randn() 當中的,即 np.random.randn(*(1, 2, 3)) <=> np.random.randn(1, 2, 3)。
到此這篇關(guān)于Python中的解包(tuple和dict的解包、*、**)的幾種使用方法的文章就介紹到這了,更多相關(guān)Python 解包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python自動化測試Eclipse+Pydev 搭建開發(fā)環(huán)境
本文主要介紹python自動化測試環(huán)境搭建,這里對Eclipse+Pydev 搭建開發(fā)環(huán)境做了圖文詳解,有需要的小伙伴可以參考下2016-08-08
Python實現(xiàn)文件下載的方法匯總與適用場景介紹
在Python開發(fā)中,文件下載是常見需求,本文將全面介紹10種Python下載文件的方法,每種方法都配有完整代碼示例和適用場景分析,大家可以根據(jù)需要進行選擇2025-05-05
Python?Flask實現(xiàn)后臺任務(wù)輕松構(gòu)建高效API應用
本文介紹如何使用Python?Flask框架實現(xiàn)后臺任務(wù),以快速構(gòu)建高效的API應用。通過實例演示,讀者將學會如何利用Flask框架搭建后臺任務(wù),實現(xiàn)異步處理和多線程操作等高級功能,提升應用性能和用戶體驗2023-04-04
使用matplotlib在Python中繪制數(shù)據(jù)的詳細教程
Python 在處理數(shù)據(jù)方面非常出色,通常,數(shù)據(jù)集 會包括多個變量和許多實例,這使得很難理解數(shù)據(jù)的情況,數(shù)據(jù)可視化是幫助您識別數(shù)據(jù)模式的一種有用方式,本教程將描述如何使用 matplotlib 在 Python 中繪制數(shù)據(jù),需要的朋友可以參考下2024-10-10
使用Python實現(xiàn)批量訪問URL并解析XML響應功能
在現(xiàn)代Web開發(fā)和數(shù)據(jù)抓取中,批量訪問URL并解析響應內(nèi)容是一個常見的需求,本文將詳細介紹如何使用Python實現(xiàn)批量訪問URL并解析XML響應功能,文中有詳細的代碼示例供大家參考,需要的朋友可以參考下2025-01-01
吳恩達機器學習練習:神經(jīng)網(wǎng)絡(luò)(反向傳播)
這篇文章主要介紹了學習吳恩達機器學習中的一個練習:神經(jīng)網(wǎng)絡(luò)(反向傳播),在這個練習中,你將實現(xiàn)反向傳播算法來學習神經(jīng)網(wǎng)絡(luò)的參數(shù),需要的朋友可以參考下2021-04-04

