最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python+numpy實現(xiàn)的基本矩陣操作示例

 更新時間:2019年07月19日 09:40:19   作者:月下花弄影  
這篇文章主要介紹了python+numpy實現(xiàn)的基本矩陣操作,結(jié)合實例形式分析了Python使用numpy模塊針對矩陣進行創(chuàng)建、增刪查改、索引、運算相關(guān)操作實現(xiàn)技巧,注釋中包含有詳細(xì)的說明,需要的朋友可以參考下

本文實例講述了python+numpy實現(xiàn)的基本矩陣操作。分享給大家供大家參考,具體如下:

#! usr/bin/env python
# coding: utf-8
# 學(xué)習(xí)numpy中矩陣的代碼筆記
# 2018年05月29日15:43:40
# 參考網(wǎng)站:http://cs231n.github.io/python-numpy-tutorial/
import numpy as np
#==================矩陣的創(chuàng)建,增刪查改,索引,運算=================================#
#==================矩陣的創(chuàng)建,增刪查改=================================#
# # 創(chuàng)建行向量
# x = np.array([1,2,3])
# # 修改某個值
# x[0] = 0
# 注意下標(biāo)索引從0開始,與MATLAB不一樣
# print(x)
# print(x.shape)
# print(type(x))
#
# # 創(chuàng)建二維與多維矩陣
# matrix = np.array([[1,2,3],[1,2,3],[2,3,4]]) # 注意這里有一個小括號,小括號中還有一個中括號
# # 取出某個元素
# a1 = matrix[0][0]
# print(a1)
# print(matrix.shape)
#
# # # 創(chuàng)建特殊矩陣
# # 0矩陣
# zeros = np.zeros((2,2))# 注意,這里有兩個小括號,并且返回浮點型數(shù)據(jù),而不是整形
# print(zeros)
#
# # 創(chuàng)建1矩陣
# ones = np.ones([3,3])# 注意這里也是兩個括號,其中里面的小括號也可是中括號,但是不建議使用
# print(ones)
#
# # 創(chuàng)建元素相同()的矩陣
# full = np.full((2,3),2) #其中第一個括號表示矩陣大小,后面的數(shù)字表示填充的數(shù)字
# print(full)
#
# # 創(chuàng)建對角數(shù)為1的矩陣
# diag = np.eye(3,3)#注意這里如果行列數(shù)不同,只會讓行列下標(biāo)相等的元素為1
# print(diag)
#
# # 創(chuàng)建隨機矩陣(值在0到1之間),注意這個方式不可以重復(fù),也就是隨機不可以全部重現(xiàn),每次運行都會不一樣
# random = np.random.random((2,3))
# 寫到這里,我需要說明一點,就是如何確定括號的個數(shù)
# numpy下的方法肯定是有一個小括號的,且不可以改變
# 想要表達(dá)多維陣列,則需要輸入一個元祖(小括號)或者列表(中括號)來創(chuàng)建,這時就需要小括號或者中括號
# 如果是自己手敲出多維陣列,每一行需要中括號表示,用逗號分離每一行,然后外層再用一個中括號表示整個矩陣,然后再作為一個舉證輸入函數(shù)中
# print(random)
#=======================矩陣的索引,切片=========================#
metaMatrix = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])#用逗號,而不能用空格
# # 單個元素的索引
# a = metaMatrix[0][0]
# b = metaMatrix[0,0] # 這里不能使用小括號
# print(a)
# print(b)
#
# # 切片操作
# a_ = metaMatrix[0:2,1]# 注意這里冒號后面的數(shù)是不索引的,如果缺省就是到最后,冒號前是可以得到的
# # 冒號后的數(shù)不索引,這時python的特點,與MATLAB不一樣
# print(a_)
#
# # 注意切片操作后矩陣維度的變化
# a1 = metaMatrix[0:1,:]
# a2 = metaMatrix[0,:]
# b = metaMatrix[0,1]
# print(a1)
# print(a2)
# print(b)
# # 注意到這兩行代碼得到的數(shù)據(jù)是一樣的,但是維度已經(jīng)發(fā)生了變化
# print(a1.shape) #a1仍然是矩陣
# print(a2.shape) #a2則是一個行向量,相比原矩陣,這里就少了一個維度,這與MATLAB有點不同
# print(b.shape) #b是沒有維度的,就是一個數(shù)而已
#
# # 利用已有矩陣創(chuàng)建新矩陣,方法比較多樣化
# SrcMatrix = np.array([[1,2], [3, 4], [5, 6]])
# print(SrcMatrix)
# # 利用矩陣的方式索引原有矩陣
# matrix1 = SrcMatrix[[0,1],[1,1]]# 這時將兩個中括號的對應(yīng)元素組合起來進行索引,是單個元素索引的擴展
# # 進行單個元素索引,然后組合起來,并用np.array創(chuàng)建成np的數(shù)組
# matrix2 = np.array([SrcMatrix[0][1],SrcMatrix[1][1]])
# # 如果不用np.array來創(chuàng)建成np的矩陣,就會導(dǎo)致數(shù)據(jù)格式的變化,對應(yīng)的操作就會發(fā)生變化
# matrix3 = [SrcMatrix[0][1],SrcMatrix[1][1]]
# print(matrix1)
# print(matrix2)
# print(matrix3)
# print(type(matrix1))
# print(type(matrix2))
# print(type(matrix3))
#
# # numpy矩陣的元素索引方式可以用于改變或者選擇矩陣不同行的元素(不僅僅是同一列的數(shù)據(jù))
# a = np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]])
# b = np.array([0,2,0,1])
# # 先介紹一下np.arrange()函數(shù),表示創(chuàng)建一個從起始值到結(jié)束值少1(前面提到過,python中經(jīng)常不到這個值)的行向量,也可以設(shè)定步長
# c = a[np.arange(4),b] #其實就是相當(dāng)于矩陣方式索引一個矩陣中的元素(這比MATLAB中更加自由一些)
# print(c)
# # 改變矩陣的指定元素
# a[np.arange(4),b] += 10
# print(a)
#
# # 布爾型陣列,可以用來索引一些滿足特定條件的元素
# matrix = np.array([[1,2],[3,4],[5,6]])
# bool_id = matrix>2 # 也可以寫成bool_id =(matrix>2),注意,寫成中括號就是不同含義了
# print(bool_id)
# print(matrix[bool_id])
# # 可以將上面兩行代碼合成一行
# matrix_ = matrix[matrix>2]# 注意,這里得到的是一維向量
# print(matrix_)
#
#=========================numpy array的數(shù)據(jù)類型=======================================#
# # numpy的array的數(shù)據(jù)類型是自動識別的,但也可以指定
# # 如果輸入為整形,則會給數(shù)據(jù)的類型定義為int64
# matrix1 = np.array([1,2,3])
# print(matrix1.dtype)
# # 如果輸入的數(shù)據(jù)為小數(shù)點,則會給數(shù)據(jù)類型定義為float64
# matrix2 = np.array([1.0,2.0,3.0])
# print(matrix2.dtype)
# # 如果有浮點型也有整形數(shù)據(jù),會賦值給占字節(jié)數(shù)多的數(shù)據(jù)類型,且對應(yīng)為64的
# matrix3 = np.array([1,2.0])
# print(matrix3.dtype)
# # 也可以指定數(shù)據(jù)類型
# matrix4 = np.array([1,2],dtype=np.int8)
# print(matrix4.dtype)
# # 當(dāng)數(shù)據(jù)本身和指定的數(shù)據(jù)類型不符合時,會將數(shù)據(jù)轉(zhuǎn)化成指定的數(shù)據(jù)類型,有可能會發(fā)生溢出
# matrix5 = np.array([1,2000000,3.1],dtype=np.int8)
# print(matrix5)
# print(matrix5.dtype)
#=========================矩陣的運算===================================#
#
# # 兩種加法和減法,乘除
# x = np.array([[1,2],[3,4]])
# y = np.array([[5,6],[7,8]])
# sum1 = x + y# 直接使用加法
# sum2 = np.add(x,y)# 運用numpy的函數(shù)
# print(sum1)
# print(sum2)
#
# substract1 = x - y
# substract2 = np.subtract(x,y)
# print(substract1)
# print(substract2)
#
# prodution1 = x * y# 這是對應(yīng)元素的乘法
# prodution2 = np.multiply(x,y)
# print(prodution1)
# print(prodution2)
#
# devide1 = x/y
# devide2 = np.divide(x,y)
# # 注意矩陣進行運算時,數(shù)據(jù)類型不改變,因此,需要注意溢出現(xiàn)象等
# print(devide1)
# print(devide2)
#
# # 矩陣的兩種向量乘法(使用dot)
# x = np.array([[1,2],[3,4]])
# y = np.array([[5,6],[7,8]])
# multiDot1 = x.dot(y)
# multiDot2 = np.dot(x,y)
# print(multiDot1)
# print(multiDot2)
#
# # 矩陣運算基本函數(shù)
# x = np.array([[1,2],[3,4]])
# # 求和函數(shù)
# # 對所有元素求和
# sum_all = np.sum(x)
# # 對列求和
# sum_column = np.sum(x, 0)# 注意和MATLAB中的區(qū)分一下。
# # 對行求和
# sum_row = np.sum(x, 1)
# print(sum_all)
# print(sum_column)
# print(sum_row)
#
# # 矩陣的轉(zhuǎn)置
# x = np.array([[1,2],[3,4]])
# transform = x.T
# print(transform)
#
# # broadcasting的應(yīng)用,可以進行不同維度的矩陣算數(shù)運算
# # 考慮將一個常量行向量加到一個矩陣的每一行上
# # 下面會將x行向量加到y(tǒng)矩陣的每一行上(但是這個方法由于有顯示循環(huán),而顯示循環(huán)比較慢一些,我們經(jīng)常會采用其他方法)
# y = np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]])
# x = np.array([1, 0, 1])
# y_ = np.empty_like(y) # 創(chuàng)建一個和y相同維度的矩陣,但沒有放內(nèi)容,但是已經(jīng)開辟了一塊內(nèi)存,其中的數(shù)據(jù)可能隨機
# print(y_)
# for i in range(4):
#  y_[i,:] = y[i,:] + x
# print(y_)
# # 另一種方法是我們先將x復(fù)制3份,垂直放置,組成一個矩陣,再進行矩陣加法
# x_ = np.tile(x,(4,1))# np.tile表示復(fù)制,(4,1)表示將x作為元素,組成4*1的矩陣形式
# y__ = np.add(y,x_)
# print(y__)
# # 實際上,如果不對x進行處理,而直接將兩者相加,如果x和y滿足一些條件,x會自動復(fù)制
# # 條件是x和y在一個維度上相等,另一個維度上不一樣并且可以通過復(fù)制可以實現(xiàn)維度相等,則會自動復(fù)制
# print(y+x)
# # 這里進行一個其他的測試
# print(x.T+y.T)# 可以看出可以實現(xiàn)列的復(fù)制
# 這里進行都不為向量的相加
# a1 = np.array([[1,2],[3,4],[5,6],[7,8]])
# a2 = np.array([[1,0],[0,1]])
# print(a1+a2)# 這里會出錯,說明只能自動進行一維數(shù)據(jù)的復(fù)制,多維數(shù)據(jù)不支持自動復(fù)制,而需要顯式復(fù)制
# # 同樣的,加法,減法和除法也都適合上面的自動復(fù)制原理
# 將一個矩陣或者向量進行維度的調(diào)整
x1 = np.array([1,2,3])
y1 = np.array([1,2])
# 實現(xiàn)x1和y1轉(zhuǎn)置的矩陣乘法,可以先將y1變成列向量
print(np.multiply(x1, np.reshape(y1,(2,1))))
# 試一下其他的維度變化
x2 = np.array([[1,2],[3,4],[5,6],[7,8]])
print(np.reshape(x2, (2,4)))
print(np.reshape(x2, (4,2)))# 基本上按照西安航后列的順序進行

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)學(xué)運算技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進階經(jīng)典教程

希望本文所述對大家Python程序設(shè)計有所幫助。

相關(guān)文章

  • python實現(xiàn)udp聊天窗口

    python實現(xiàn)udp聊天窗口

    這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)udp聊天窗口,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Python中if和elif的用法示例及區(qū)別詳解

    Python中if和elif的用法示例及區(qū)別詳解

    這篇文章主要給大家介紹了關(guān)于Python中if和elif的用法示例及區(qū)別的相關(guān)資料,除了基本的if和else語句外,elif(即else?if)也是一個非常重要的組成部分,需要的朋友可以參考下
    2024-04-04
  • python中遍歷文件的3個方法

    python中遍歷文件的3個方法

    這篇文章主要介紹了python中遍歷文件的3個方法,本文分別使用os.path.walk()、os.walk()、os.listdir()來實現(xiàn),需要的朋友可以參考下
    2014-09-09
  • 基于Python新建用戶并產(chǎn)生隨機密碼過程解析

    基于Python新建用戶并產(chǎn)生隨機密碼過程解析

    這篇文章主要介紹了基于Python新建用戶并產(chǎn)生隨機密碼過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • python openssl模塊安裝及用法

    python openssl模塊安裝及用法

    在本篇文章里小編給大家整理的是一篇關(guān)于python openssl模塊安裝及用法,有需要的朋友們可以學(xué)習(xí)下。
    2020-12-12
  • PyTorch中torch.tensor()和torch.to_tensor()的區(qū)別

    PyTorch中torch.tensor()和torch.to_tensor()的區(qū)別

    在Pytorch中Tensor和tensor都用于生成新的張量,但二者并不相同,下面這篇文章主要給大家介紹了關(guān)于PyTorch中torch.tensor()和torch.to_tensor()區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • Python數(shù)據(jù)可視化教程之Matplotlib實現(xiàn)各種圖表實例

    Python數(shù)據(jù)可視化教程之Matplotlib實現(xiàn)各種圖表實例

    這篇文章主要給大家介紹了關(guān)于Python數(shù)據(jù)可視化教程之利用Matplotlib實現(xiàn)各種圖表的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧
    2019-01-01
  • Python中常用的高階函數(shù)實例詳解

    Python中常用的高階函數(shù)實例詳解

    高階函數(shù)指的是能接收函數(shù)作為參數(shù)的函數(shù)或類,這篇文章主要介紹了Python中常用的高階函數(shù),通過實例文字解釋相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2020-02-02
  • 如何使用Python處理登錄與驗證碼

    如何使用Python處理登錄與驗證碼

    Python 爬蟲在抓取需要登錄的網(wǎng)站數(shù)據(jù)時,通常會遇到兩個主要問題:登錄驗證和驗證碼處理,這些機制是網(wǎng)站用來防止自動化程序過度抓取數(shù)據(jù)的主要手段,本文將詳細(xì)講解如何使用 Python 處理登錄與驗證碼,以便進行順利的數(shù)據(jù)抓取,需要的朋友可以參考下
    2024-11-11
  • Python+mpld3實現(xiàn)交互式Matplotlib圖表

    Python+mpld3實現(xiàn)交互式Matplotlib圖表

    通過結(jié)合使用Matplotlib和mpld3庫,我們可以輕松地創(chuàng)建交互式圖表,使得數(shù)據(jù)可視化更加生動和易于理解,下面就跟隨小編一起來學(xué)習(xí)一下具體實現(xiàn)方法吧
    2024-10-10

最新評論

左权县| 庐江县| 潼关县| 清河县| 周宁县| 辰溪县| 武功县| 穆棱市| 雷州市| 凤冈县| 南部县| 普兰县| 霍林郭勒市| 耿马| 枣庄市| 扬州市| 含山县| 赣榆县| 兴和县| 库车县| 峨边| 游戏| 昌黎县| 贞丰县| 娱乐| 宝丰县| 安化县| 新乡市| 庆安县| 仁寿县| 奈曼旗| 黑水县| 庆元县| 弥渡县| 嵊泗县| 从江县| 卢龙县| 涟水县| 佛冈县| 奉化市| 上饶市|