1. 程式人生 > >numpy.zeros((5,))中(5,)的含義 順便複習Python中tuple的用法

numpy.zeros((5,))中(5,)的含義 順便複習Python中tuple的用法

最近遇到numpy.zero()這個函式時有幾個疑惑的地方:

1、想生成5×2階的零矩陣時為什麼不是zeros(5,2),而是多了個括號zeros((5,2))?

2、查到幫助文件的示例zeros((5,))=array([ 0.,  0.,  0.,  0.,  0.]),表示疑惑,(5,)代表什麼呢?後面,省略了什麼?0?1?

 1.從幫助文件得到答案:第一個引數表示矩陣的shape,如果是zeros(5,2)則給兩個引數賦值了shape=5, dytpe=2, 這是錯誤的,(5,2)代表一個引數而已。

help(numpy.zeros)
Help on built-in function zeros in module numpy.core.multiarray:

zeros(...)
    zeros(shape, dtype=float, order='C')
    
    Return a new array of given shape and type, filled with zeros.
    
    Parameters
    ----------
    shape : int or sequence of ints
        Shape of the new array, e.g., ``(2, 3)`` or ``2``.
    dtype : data-type, optional
        The desired data-type for the array, e.g., `numpy.int8`.  Default is
        `numpy.float64`.
    order : {'C', 'F'}, optional
        Whether to store multidimensional data in C- or Fortran-contiguous
        (row- or column-wise) order in memory.
    
    Returns
    -------
    out : ndarray
        Array of zeros with the given shape, dtype, and order.
    
    Examples
    --------
np.zeros(5)
    array([ 0.,  0.,  0.,  0.,  0.])
    
np.zeros((5,), dtype=np.int)
    array([0, 0, 0, 0, 0])
    
np.zeros((2, 1))
    array([[ 0.],
           [ 0.]])
    
s = (2,2)
np.zeros(s)
    array([[ 0.,  0.],
           [ 0.,  0.]])
    
np.zeros((2,), dtype=[('x', 'i4'), ('y', 'i4')]) # custom dtype
    array([(0, 0), (0, 0)],
          dtype=[('x', '<i4'), ('y', '<i4')])

2、繼續查幫助文件

 help(numpy.zeros(5,))
Help on ndarray object:

class ndarray(__builtin__.object)
 |  ndarray(shape, dtype=float, buffer=None, offset=0,
 |          strides=None, order=None)
 |  
 |  An array object represents a multidimensional, homogeneous array
 |  of fixed-size items.  An associated data-type object describes the
 |  format of each element in the array (its byte-order, how many bytes it
 |  occupies in memory, whether it is an integer, a floating point number,
 |  or something else, etc.)
 |  
 |  Arrays should be constructed using `array`, `zeros` or `empty` (refer
 |  to the See Also section below).  The parameters given here refer to
 |  a low-level method (`ndarray(...)`) for instantiating an array.
 |  
 |  For more information, refer to the `numpy` module and examine the
 |  the methods and attributes of an array.
 |  
 |  Parameters
 |  ----------
 |  (for the __new__ method; see Notes below)
 |  
 |  shape : tuple of ints
 |      Shape of created array.
 |  dtype : data-type, optional
 |      Any object that can be interpreted as a numpy data type.
 |  buffer : object exposing buffer interface, optional
 |      Used to fill the array with data.
 |  offset : int, optional
 |      Offset of array data in buffer.
 |  strides : tuple of ints, optional
 |      Strides of data in memory.
 |  order : {'C', 'F'}, optional
 |      Row-major (C-style) or column-major (Fortran-style) order.
 |  
 ..................

這時才發現zeros的第一個引數shape是由整數或tuple表示,這時意識到(5,)表示的應該是tuple,於是查了tuple的用法及注意事項就明白了,答案在下面標紅標粗加大,簡單理解(5,)就代表5,隨便複習下tuple用法:

tuple

另一種有序列表叫元組:tuple。tuple和list非常類似,但是tuple一旦初始化就不能修改,比如同樣是列出同學的名字:

>>> classmates = ('Michael', 'Bob', 'Tracy')

現在,classmates這個tuple不能變了,它也沒有append(),insert()這樣的方法。其他獲取元素的方法和list是一樣的,你可以正常地使用classmates[0]

classmates[-1],但不能賦值成另外的元素。

不可變的tuple有什麼意義?因為tuple不可變,所以程式碼更安全。如果可能,能用tuple代替list就儘量用tuple。

tuple的陷阱:當你定義一個tuple時,在定義的時候,tuple的元素就必須被確定下來,比如:

>>> t = (1, 2)
>>> t
(1, 2)

如果要定義一個空的tuple,可以寫成()

>>> t = ()
>>> t
()

但是,要定義一個只有1個元素的tuple,如果你這麼定義:

>>> t = (1)
>>> t
1

定義的不是tuple,是1這個數!這是因為括號()既可以表示tuple,又可以表示數學公式中的小括號,這就產生了歧義,因此,Python規定,這種情況下,按小括號進行計算,計算結果自然是1

所以,只有1個元素的tuple定義時必須加一個逗號,,來消除歧義:

>>> t = (1,)
>>> t
(1,)

Python在顯示只有1個元素的tuple時,也會加一個逗號,,以免你誤解成數學計算意義上的括號。

最後來看一個“可變的”tuple:

>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])

這個tuple定義的時候有3個元素,分別是'a''b'和一個list。不是說tuple一旦定義後就不可變了嗎?怎麼後來又變了?

別急,我們先看看定義的時候tuple包含的3個元素:

tuple-0

當我們把list的元素'A''B'修改為'X''Y'後,tuple變為:

tuple-1

表面上看,tuple的元素確實變了,但其實變的不是tuple的元素,而是list的元素。tuple一開始指向的list並沒有改成別的list,所以,tuple所謂的“不變”是說,tuple的每個元素,指向永遠不變。即指向'a',就不能改成指向'b',指向一個list,就不能改成指向其他物件,但指向的這個list本身是可變的!

理解了“指向不變”後,要建立一個內容也不變的tuple怎麼做?那就必須保證tuple的每一個元素本身也不能變。


相關推薦

numpy.zeros((5,))(5,)的含義 順便複習Pythontuple用法

最近遇到numpy.zero()這個函式時有幾個疑惑的地方: 1、想生成5×2階的零矩陣時為什麼不是zeros(5,2),而是多了個括號zeros((5,2))? 2、查到幫助文件的示例zeros((5,))=array([ 0.,  0.,  0.,  0.,  0.])

numpyint類型與python的int

nbsp python pan num blog res port numpy log 【code】 import numpy as np nparr = np.array([[1 ,2, 3, 4]]) np_int32 = nparr[0][0] # np_in

python的單例模式 python的單例模式

python中的單例模式   一、單例模式的概述: 單例模式是一種常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例類的特殊類。通過單例模式可以保證系統中一個類只有一個例項而且該例項易於外界訪問,從而方便對例項個數的控制並節約系統資源。如果希望在系統中某個類的物件

PythonNumpy(5.numpy排序)

1.ndarray的排序 '''1.排序''' n1 = np.array([2, 5, 1, 7, 4]) print(n1) def sortn(nd): # 自己寫出氣泡排序的演算法 for i in range(nd.size): for j in range

python@符號兩種含義,1表示修飾符,2表示矩陣乘法(python3.5以後)

第一種,大家所熟知,表示修飾符,可以在模組或者類的定義層內對函式進行修飾。出現在函式定義的前一行,不允許和函式定義在同一行。在下面這種情況 def funcA(A): print("function A") print(A) def funcB(B): print(B(

5月15日上課筆記-js location對象的屬性、document對象、js內置對象、Date事件對象、

nts 根據 host value string 定時函數 date this 個數 location的屬性: host: 返回當前主機名和端口號 定時函數: setTimeout( ) setInterval() 二、document對

ESXI6.5創建標準交換機(在vCenter創建)

平衡 -a nbsp ansi pan 並且 轉載 stand image 一、簡介標準交換機是由每臺ESXi單獨管理的簡易交換機,與物理交換機非常類似,但不具備物理交換機所擁有的一些高級功能。標準交換機操作簡單,但每次進行配置修改都要在所有ESXi主機上進行重復操作,增加

在VM虛擬機安裝Redhat6.5 / CentOs6.5

Redhat CentOS Linux安裝 Redhat CentOs 作為linux中非常重要的一,受到大部分用戶的喜愛。本篇博客將會指導如何在VM虛擬機環境下安裝這兩個系統。 實驗目的: 在VM虛擬機下安裝Redhat6.5 / CentOs6.5。實驗環境:VM虛擬機準備材料:Redhat6

20.5-20.9 shel:l腳本的邏輯判斷,文件目錄屬性判斷,if特殊用法 ,case判斷

shell shell腳本 邏輯判斷 case判斷 if特殊用法 20.5 shell腳本中的邏輯判斷不帶else格式1:if 條件 ; then 語句; fi(這種格式常用)解釋:如果滿足條件,然後怎樣,最後怎樣實例:1 命令行形式表示[root@AliKvn ~]# a=5[root@

Python5種容器數據類型之性質對照表

技術 font spa nbsp bubuko img python span 圖片 以下是作者總結的Python五大容器類數據類型的性質對照表,供大家參考記憶。 Python中5種容器數據類型之性質對照表

pythonnumpy.zeros(np.zeros)的使用方法

用法:zeros(shape, dtype=float, order='C') 返回:返回來一個給定形狀和型別的用0填充的陣列; 引數:shape:形狀 dtype:資料型別,可選引數,預設numpy.float64 dtype型別: t ,位域,如t4代表4位 b,布林值,true o

Python視覺化的Matplotlib(5.直方圖、條形圖以及餅圖的用法和詳細的引數)

1.  直方圖   hist()      直方圖的引數只有一個X import matplotlib.pyplot as plt # 匯入繪圖模組 import numpy as np # 匯入需要生成資料的numpy模組 '

專家阿哲昨65回報超8倍!戴維競彩近1210

@央廣軍事11月10日訊息,2018中國航展上首次公開展出的“瞭望者Ⅱ”察打一體導彈無人艇,是剛剛成功進行首發導彈飛行試驗命中靶心的實艇,試驗成功後隨即吊裝到展位與公眾見面。據媒體此前報道,該艇是中國第一艘導彈無人艇,也是繼以色列拉斐爾海上騎士後全球第二個成功發射導彈的無人艇,填補了國內導彈無人艇這一技術空白

VirtualBox虛擬機器安裝Linux redhat 5.4 64位版本的過程出現的問題及解決方法

問題一:     在使用VirtualBox虛擬機器安裝Linux redhat 5.4 64位版本的過程中,彈出   “VT-x/AMD-V 硬體加速器已被啟動,但當前處於無效狀態。您虛擬電腦內的作業系統將無法檢測到64位的CPU,因此也將無法啟動。”&n

springboot 1.5.2升級2.0.4 mongodbQueryBuilderDBObject被棄用,改為Document構造及解決方式

今天封裝mongo工具包,發現QueryBuilder中DBObject被棄用,改為Document構造。為什麼,我們稍微分析一下  Document實現Map,與基本的DBObject相比,可編寫的程式碼更少 DBObject雖然不被推薦,那些從2.x驅動程式系列可能繼續使用DB

python的關鍵字---5(時間/隨機模塊)

random 計算 關鍵字 使用 size 規劃 orm style 不同的 模塊 什麽是模塊?模塊就是別人寫好的代碼,放在一個py文件裏,給你使用模塊有幾種?三種 : 內置模塊\第三方模塊\自定義模塊模塊是好的為什麽要有模塊? 寫好了之後直接給你用 - 方便了用戶的

《OpenCV3程式設計入門》——5.1.5 訪問影象畫素的三類方法(指標訪問、迭代器iterator、動態地址計算配合at元素)

目錄 1、指標訪問畫素 2、迭代器操作畫素 3、動態地址計算 OpenCV中,有三種方式訪問影象畫素:  指標訪問:C操作符[]; 迭代器iterator 動態地址計算 上述方法在訪問速度上略有差異。debug模式下,

網路爬蟲過程5種網頁去重方法簡要介紹

一般的,我們想抓取一個網站所有的URL,首先通過起始URL,之後通過網路爬蟲提取出該網頁中所有的URL連結,之後再對提取出來的每個URL進行爬取,提取出各個網頁中的新一輪URL,以此類推。整體的感覺就是自上而下進行抓取網頁中的連結,理論上來看,可以抓取整站所有的連結。但是問題來了,一個網站中網頁的連結是有

三分95砍17分 遼籃最困難時他打出最佳一戰

11月29日訊息,@北京商報從度小滿金融人士處獲悉,百度正式拿到准許經營證券期貨的許可證。據許可證顯示,機構名稱為北京百度百盈科技有限公司(下稱“百度百盈”),證券期貨業務經營範圍為基金銷售。而今年8月22日,根據北京證監局官網顯示,證監局已核准百度百盈證券投資基金銷售業務資格。 企查查資訊顯示,百度百盈成