❶ python 查找二維數組的相鄰元素
#coding=utf-8
'''
Createdon2014-3-21
@author:Neo
'''
defPrintList(array):#輸出數組
foriinrange(array.__len__()):
printarray[i]
defSetList(array):#給數組賦值
row=11
col=11
foriinrange(array.__len__()):
forjinrange(array[i].__len__()):
array[i][j]=row
row+=10
col+=1
row=col
print"賦值後的二維數組:"
PrintList(array)
returnarray
defInitList(x,y):
#初始化一個二維數組
array=[([0]*y)foriinrange(x)]
returnarray
defGetListByCoord(array,radius,x,y):
#根據半徑來確定數組的行數和列數
row_col=2*radius+1
#初始化結果數組
result=InitList(row_col,row_col)
#獲取傳入的array的行數和列數
arrayRow,arrayCol=len(array),len(array[0])
#坐標x、y的值即為結果數組的中心,依此為偏移
foriinrange(result.__len__()):
forjinrange(result.__len__()):
if(i+x-radius<0orj+y-radius<0or
i+x-radius>=arrayRoworj+y-radius>=arrayCol):
result[i][j]=0
else:
result[i][j]=array[i+x-radius][j+y-radius]
#列印結果
print"結果為:"
PrintList(result)
if__name__=='__main__':
#數組7列6行
array=SetList(InitList(6,7))
GetListByCoord(array,1,3,3)
GetListByCoord(array,2,3,3)
GetListByCoord(array,2,0,0)
GetListByCoord(array,2,0,6)
GetListByCoord(array,2,5,0)
GetListByCoord(array,2,5,6)
運行結果為:
---------------------------------------------------------------------------------------------
賦值後的二維數組:
[11, 21, 31, 41, 51, 61, 71]
[12, 22, 32, 42, 52, 62, 72]
[13, 23, 33, 43, 53, 63, 73]
[14, 24, 34, 44, 54, 64, 74]
[15, 25, 35, 45, 55, 65, 75]
[16, 26, 36, 46, 56, 66, 76]
結果為:
[33, 43, 53]
[34, 44, 54]
[35, 45, 55]
結果為:
[22, 32, 42, 52, 62]
[23, 33, 43, 53, 63]
[24, 34, 44, 54, 64]
[25, 35, 45, 55, 65]
[26, 36, 46, 56, 66]
結果為:
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[0, 0, 11, 21, 31]
[0, 0, 12, 22, 32]
[0, 0, 13, 23, 33]
結果為:
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[51, 61, 71, 0, 0]
[52, 62, 72, 0, 0]
[53, 63, 73, 0, 0]
結果為:
[0, 0, 14, 24, 34]
[0, 0, 15, 25, 35]
[0, 0, 16, 26, 36]
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
結果為:
[54, 64, 74, 0, 0]
[55, 65, 75, 0, 0]
[56, 66, 76, 0, 0]
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
❷ numpy基礎——ndarray對象
numpy 是使用python進行數據分析不可或缺的第三方庫,非常多的科學計算工具都是基於 numpy 進行開發的。
ndarray對象是用於存放同類型元素的多維數組,是numpy中的基本對象之一,另一個是func對象。本文主要內容是: 1 、簡單介紹ndarray對象 ; 2、ndarray對象的常用屬性 ; 3、如何創建ndarray對象 ; 4、ndarray元高悔素訪問 。
它的維度以及個維度上的元素個數由 shape 決定。
標題中的函數就是numpy的構造函數,我們可以使用這個函數創建一個ndarray對象。構造函數有如下幾個可選參數:
實例:
接下來介紹ndarray對象最常用的屬性
實例:
使用 array 函數,從常規的python列表或者元組中創建數組,元素的類型由原序列中的元素類型確定。
實例:
subok 為 True ,並且object是敗念敬ndarray子類時(比如矩陣類型),返回的數組保留子類類型
某些時候,我們在創建數組之前已經確定了數組的維度以及各維度的長度。這時我們就可以使用numpy內建的一些函數來創建ndarray。
例如:函數 ones 創建一個全1的數組、函數 zeros 創建一個全0的數組、函數 empty 創建一個內容隨機的數組,在默認情況下,用這些函數創建的數組的類型都是float64,若需要指定數據類型,只需要閑置 dtype 參數即可:
上述三個函數還有三個從已知的數組中,創建 shape 相同的多維數組: ones_like 、 zeros_like 、 empty_like ,用法如下:
除了上述幾個用於創建數組的函數,還有如下幾個特殊的函數:
特別地, eye 函數的全1的對角線位置有參數k確定
用法如下:
除了上面兩個函數還有其他幾個類似的從外部獲取數據並創建ndarray,比如: frombuffer 、 fromfile 、 fromiter ,還沒用過,等用到了在詳細記錄
ndarray提供了一些創建二維數組的特殊函數。numpy中matrix是對二維數組ndarray進行了封裝之後的子類。這里介紹的關於二維數組的創建,返回的依舊是一個ndarray對象,而不是matrix子類。關於matrix的創建和操作,待後續筆記詳細描述。為了表述方便,下面依舊使用 矩陣 這一次來表示創建的二維數組。
對於一維的ndarray可以使用python訪問內置list的方式進行訪問:整數索引、切片、迭代等方式
關於ndarray切片
與內置list切片類似,形式:
array[beg:end:step]
beg: 開始索引
end: 結束索引(不包含這個元素)
step: 間隔
需要注意的是 :
特別注意的是,ndarray中的切片返回的數組中的元素是原數組元素的索引,對返回數組元素進行修改會影響原數組的值
除了上述與list相似的訪問元素的方式,ndarray有一種通過 列表 來指定要從ndarray中獲取元素的索引,例如:
多維ndarray中,每一維都叫一個軸axis。在ndarray中軸axis是非常重要的,有很多對於ndarray對象的運算都是基於axis進行,比如sum、mean等都會有一個axis參數(針對對這個軸axis進行某些運察慎算操作),後續將會詳細介紹。
對於多維數組,因為每一個軸都有一個索引,所以這些索引由逗號進行分割,例如:
需要注意的是 :
多維數組的迭代
可以使用ndarray的 flat 屬性迭代數組中每一個元素
❸ Numpy array數組的常見運算
Numpy是Python最流行的數學計算庫之一,它 支持多維數組與矩陣的各種運算。在Numpy庫中ndarray對象是其核心,它支持任意維度的數組(向量),所有的運算都是以array為基礎展開的。此外,在 Numpy的 矩陣mat是array的一個子集,也就是二維的數組。
下面我們來看一下array的基本運算。
NumPy數組在與數值進行運算時,具有廣播特性。也就是說,數組中的每個元素都會進行同樣的運算,這些運算包括「+、-、*、/、**、&、|、^」等。
例如:array([1,2,3,4,5])*2 相當於array([1*2,2*2,3*2,4*2,5*2]), 代碼示例如下。
對於維度相同的兩個數組,將按照元素逐項進行運算。以『*』為例:
已知
那麼:
代碼示例如下
對於維度不同的兩個數組,則會進行廣播運算, 例如
那麼
我們知道對於向量
那麼a與b的點積為:
在Numpy中,一維數組的點積(dot)和內積(inner)是相同的。但是對於多維數組來說,則有差別。inner運算中,可以將數組最後一個維度(行)視為向量,兩個數組的內積就是逐項對這些向量的內積。而dot運算則是前一個數組雨後一個數組轉置後的結果,即inner(a,b.T).
以上代碼在Python 3.7中運行通過。
❹ 什麼是數組的維度,python 的ndim的使用
數組的維度就是一個數組中的某個元素,當用數組下標表示的時候,需要用幾個數字來表示才能唯一確定這個元素,這個數組就是幾維。numpy中直接用 * 即可表示數與向量的乘法,參考python 2.7的一個例子:inport numpy as np a = np.array([1,2,3,4]) # 向量 b = 5 # 數 print a*b ++++++++++++ [5,10,15,20]
❺ Python——ndarray多維數組基本操作(1)
數組允許進行批量操作而無需使用for循環,因此更加簡便,這種特性也被稱為向量化。任何兩個等尺寸之間的算術操作都應用逐元素操作的方式進行。
同尺度數組之間的比較,會產生一個布爾型數組。
上述操作均是在同尺度數組之間進行的,對於不同尺度數組間的操作,會使用到廣播特性。
索引:獲取數組中特定位置元素的過程;
切片:獲取數組元素子集的過程。
new_a = a.astype(new_type)
astype()方法一定會創建新的數組(原始數據的一個拷貝),即使兩個類型一致。
ls = a.tolist()
轉置是一種特殊的數據重組形式,可以返回底層數據的視圖而不需要復制任何內容。
數組擁有 transpose 方法,也有特殊的 T 屬性。
對於更高緯度的數組, transpose 方法可以接受包含軸編號的元組,用於轉置軸。
ndarray的 swapaxes 方法,通過接受一對軸編號作為參數,並對軸進行調整用於重組數據。
swapaxes 方法返回的是數據的視圖,而沒有對數據進行復制。
Reference:
《Python for Data Analysis:Data Wrangling with Pandas,Numpy,and IPython》
❻ python如何獲取某個數組中某些下標的元素
print(your_list.index('your_item')) ###your_list為列表名稱 your_item為需要修該的數據。
print [i for i, x in enumerate(your_list) if x == 'your_item']
your_list為待查list,your_item為具體要查的元素,列印出一個包含所有要查元素下標的列表。
【python列表】
1、可以先創建一個空列表,可以使用type(),查看類型。
❼ Python—Numpy庫的用法
NumPy 是一個 Python 包。 它代表 「Numeric Python」。 它是一個由多維數組對象和用於處理數組的常式集合組成的庫。
NumPy 支持比 Python 更多種類的數值類型。 下表顯示了 NumPy 中定義的不同標量數據類型。
[('age', 'i1')]
[10 20 30]
[('abc', 21, 50.0), ('xyz', 18, 75.0)]
每個內建類型都有一個唯一定義它的字元代碼:
[[1, 2] [3, 4] [5, 6]]
[[[ 0, 1, 2] [ 3, 4, 5] [ 6, 7, 8] [ 9, 10, 11]] [[12, 13, 14] [15, 16, 17] [18, 19, 20] [21, 22, 23]]]
[1 2 3]
[1 2 3]
[(1, 2, 3) (4, 5)]
原始數組是: [[ 0 5 10 15] [20 25 30 35] [40 45 50 55]]
修改後的數組是: 0 5 10 15 20 25 30 35 40 45 50 55
原始數組是: [[ 0 5 10 15] [20 25 30 35] [40 45 50 55]]
原始數組的轉置是: [[ 0 20 40] [ 5 25 45] [10 30 50] [15 35 55]]
修改後的數組是: 0 5 10 15 20 25 30 35 40 45 50 55
C風格是橫著順序
F風格是豎著的順序
原始數組是: [[ 0 5 10 15] [20 25 30 35] [40 45 50 55]]
修改後的數組是: [[ 0 10 20 30] [ 40 50 60 70] [ 80 90 100 110]]
第一個數組: [[ 0 5 10 15] [20 25 30 35] [40 45 50 55]]
第二個數組: [1 2 3 4]
修改後的數組是: 0:1 5:2 10:3 15:4 20:1 25:2 30:3 35:4 40:1 45:2 50:3 55:4
原始數組: [[0 1 2 3] [4 5 6 7]]
調用 flat 函數之後: 5
原數組: [[0 1 2 3] [4 5 6 7]]
展開的數組:默認是A [0 1 2 3 4 5 6 7]
以 F 風格順序展開的數組: [0 4 1 5 2 6 3 7]
原數組: [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]]
轉置數組: [[ 0 4 8] [ 1 5 9] [ 2 6 10] [ 3 7 11]]