1. 程式人生 > >Numpy講解(快速入門)

Numpy講解(快速入門)


 
'''
import numpy as np

[[1,2,3],
[4,5,6]]#這代表的的是一個列表

array=np.array([[1,2,3],
                [4,5,6]])#通過這個函式就轉換成了陣列
print(array)
print(array.shape)#輸出的是陣列的形狀即多少行,多少列,輸出的結果是一個元組的形式,如果元組中有一個值,那麼這個陣列就是一維的陣列,一次類推。
print(array.size)#輸出陣列的大小,總共有多少個元素
print(array.ndim)#輸出陣列的維度

import numpy as np
a=np.array([1,2,3],dtype=np.int)#預設的int代表int32,你也可以寫int64還有np.float,np.complex等
b=np.array([1,2,3],ndim=2)#代表二維陣列
print(a)
print(b)
print(a.dtype)

import numpy as np
a=np.array([[1,2,3],
            [4,5,6]])
#a.shape=(3,2)
print(a)#這就是一個二維的陣列
b=np.zeros([2,2])
print(b)
c=np.ones([2,2])
print(c)
d=np.empty([2,2])
print(d)
e=np.arange(10,19,2)
print(e)
f=np.arange(12).reshape((3,4))
print(f)

import numpy as np
a=np.array([10,20,30,40])
b=np.arange(4)
c=a-b
print(a)
print(b)
print(c)
print(a**2)

import numpy as np
#eye(N,M,K)N:代表返回的行數M:代表返回的列數K:代表對角線的行號
a=np.eye(6)#返回一個對角線為1其餘為0的二維陣列
print(a)
b=np.eye(6,3,2)
print(b)
#np.inentity(N,dtype)
c=np.identity(3,int)
print(c)#返回的是一個對角線為1的二維陣列

import numpy as np
#np.matrix(data,dtype,copy)data是字串或者為ndarray型別
a=np.array([(1,2,),(3,4)])
a1 = np.matrix('1 2 7; 3 4 8; 5 6 9')
b=np.matrix(a)
print(b)#將陣列轉換成矩陣
c=np.asmatrix(a)
print(c)
print(a[0,0])
print(a1)

import numpy as np
x=np.array([1,2,3])
y=x
z=np.copy(x)
print(x)
print(y)
print(z)
x[0]=10
print(x[0]==y[0])
print(x[0]==z[0])

import numpy as np
inteable=(x**2 for x in range(1,10))
a=np.fromiter(inteable,dtype=int)
print(a)

import numpy as np
import matplotlib.pyplot as plt
#np.linspace(start,end,num)主要這幾個引數,num是分幾段。
a=np.linspace(2.0,3.0,num=5)
print(a)
N=8
y=np.zeros(N)
x1=np.linspace(0,10,N,endpoint=True)
x2=np.linspace(0,10,N,endpoint=False)
print(plt.plot(x1, y, 'o'))
plt.show()

import numpy as np
#np.diag(v,k)v就是一個數組,k是一個偏移量,函式返回的是對角線的值,如果沒有k=0的話
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
b=np.diag(a)
c=np.diag(a,k=1)
print(b)
print(c)

import numpy as np
#np.diagflat(v,k)返回的是吧陣列中的值作為對角線輸出。
a=np.array([[1,2],[3,4]])
b=np.diagflat(a)
print(b)


import numpy as np

[[1,2,3],
[4,5,6]]#這代表的的是一個列表

array=np.array([[1,2,3],
                [4,5,6]])#通過這個函式就轉換成了陣列
print(array)
print(array.shape)#輸出的是陣列的形狀即多少行,多少列
print(array.size)#輸出陣列的大小,總共有多少個元素
print(array.ndim)#輸出陣列的維度

import numpy as np
a=np.array([1,2,3],dtype=np.int)#預設的int代表int32,你也可以寫int64還有np.float,np.complex等
b=np.array([1,2,3],ndim=2)#代表二維陣列
print(a)
print(b)
print(a.dtype)

import numpy as np
a=np.array([[1,2,3],
            [4,5,6]])
print(a)#這就是一個二維的陣列
b=np.zeros([2,2])
print(b)
c=np.ones([2,2])
print(c)
d=np.empty([2,2])
print(d)
e=np.arange(10,19,2)
print(e)
f=np.arange(12).reshape((3,4))
print(f)

import numpy as np
a=np.array([10,20,30,40])
b=np.arange(4)
c=a-b
print(a)
print(b)
print(c)
print(a**2)

import numpy as np
#eye(N,M,K)N:代表返回的行數M:代表返回的列數K:代表對角線的行號
a=np.eye(6)#返回一個對角線為1其餘為0的二維陣列
print(a)
b=np.eye(6,3,2)
print(b)
#np.inentity(N,dtype)
c=np.identity(3,int)
print(c)#返回的是一個對角線為1的二維陣列

import numpy as np
#np.matrix(data,dtype,copy)data是字串或者為ndarray型別
a=np.array([(1,2,),(3,4)])
a1 = np.matrix('1 2 7; 3 4 8; 5 6 9')
b=np.matrix(a)
print(b)#將陣列轉換成矩陣
c=np.asmatrix(a)
print(c)
print(a[0,0])
print(a1)

import numpy as np
x=np.array([1,2,3])
y=x
z=np.copy(x)
print(x)
print(y)
print(z)
x[0]=10
print(x[0]==y[0])
print(x[0]==z[0])

import numpy as np
inteable=(x**2 for x in range(1,10))
a=np.fromiter(inteable,dtype=int)
print(a)

import numpy as np
import matplotlib.pyplot as plt
#np.linspace(start,end,num)主要這幾個引數,num是分幾段。
a=np.linspace(2.0,3.0,num=5)
print(a)
N=8
y=np.zeros(N)
x1=np.linspace(0,10,N,endpoint=True)
x2=np.linspace(0,10,N,endpoint=False)
print(plt.plot(x1, y, 'o'))
plt.show()

import numpy as np
#np.diag(v,k)v就是一個數組,k是一個偏移量,函式返回的是對角線的值,如果沒有k=0的話
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
b=np.diag(a)
c=np.diag(a,k=1)
print(b)
print(c)

import numpy as np
#np.diagflat(v,k)返回的是吧陣列中的值作為對角線輸出。
a=np.array([[1,2],[3,4]])
b=np.diagflat(a)
print(b)

import numpy as np
a=np.arange(10)
a[2]=100
a[3]=101
print(a)
print(a[5])
print(a[3:5])
print(a[:5])
print(a[:-1])
print(a[1:-1:2])#起始位置,結束位子,步長,三個引數的意思。
print(a[::-1])#省略起始位置和結束位置,輸出時從後往前全部輸出。
print(a[5:1:-2])#如果起始位置的下標大於結束位置的下表,那麼步長必須是負數。

import numpy as np
a=np.arange(0,60,10).reshape(-1,1)+np.arange(0,6)
print(a)
[[ 0  1  2  3  4  5]
 [10 11 12 13 14 15]
 [20 21 22 23 24 25]
 [30 31 32 33 34 35]
 [40 41 42 43 44 45]

import numpy as np
a=np.arange(0,60,10).reshape(-1,1)+np.arange(0,6)
print(a)
print(a[0:3,2:4])
print(a[:,2:4])

import numpy as np
a=np.array([1,2,3,4])
b=np.array([6,7,8,9])
c=np.add(a,b)
print(c)

import numpy as np
a=[1,2,3,4]
b=[[1,2,3],(4,5,6)]
c=np.asarray(a,dtype=float)#兩個引數
d=np.asarray(b)
print(c)#將列表轉換為陣列
print(d)

import numpy as np
x = np.array([[1,  2],  [3,  4],  [5,  6]])
print(x)
y = x[[0,1,2],  [0,1,0]]#y中的值是(0,0),(1,1),(2,0)的值。
print(y)
'''
import numpy as np
# A=np.arange(3,15).reshape(3,4)
# print(A.flatten())#把一個二維的陣列轉換為一個一維的陣列
# for item in A.flat:
#     print(item)

###################
#陣列的合併
# A=np.array([1,1,1])
# B=np.array([2,2,2])
# C=np.vstack((A,B))#把兩個資料進行合併(上下合併)
# D=np.hstack((A,B))
# E=np.array([1,1,1])[:,np.newaxis]
# F=np.array([2,2,2])[:,np.newaxis]
# G=np.hstack((E,F))
# H=np.concatenate((E,F,F,E),axis=0)
# I=np.concatenate((E,F,F,E),axis=1)
# print(A.shape)
# print(B.shape)
# print(C.shape)
# print(D.shape)
# print(G)
# print(H)
# print(I)
# print(A[np.newaxis,:].shape)#增加一個維度在行上
# print(A[np.newaxis,:])
# print(A[:,np.newaxis].shape)#增加一個維度在列上
# print(A[:,np.newaxis])
# print(C)
# print(D)

############
#陣列的分割
# A=np.arange(12).reshape(3,4)
# #等量的分割
# print(np.split(A,2,axis=1))
# print(np.split(A,3,axis=0))
# print(np.vsplit(A,3))
# print(np.hsplit(A,2))
# #不等量的分割
# print(np.array_split(A,3,axis=1))

#陣列的賦值
#這樣寫的話,如果a 改變了那麼其他的被賦值的也都會改變
# a=np.arange(4)
# b=a
# c=a
# d=b
# e=a.copy()#不被改變的賦值
# a[0]=11
# print(a)
# print(b)
# print(e)


import numpy as np
'''
a=np.arange(15).reshape(3,5)
print(a)#輸出a
print(np.size(a))#陣列的大小。元組的長度的值等於軸的數量ndim。
print(np.ndim(a))#陣列的軸數也就是秩數
print(np.shape(a))#陣列的形狀幾行幾列
print(a.dtype.name)#陣列的型別
# 維度就是我們所說的空間維度,一維是直線,二維平面(比如1080p灰度圖,1920x1080),
# 三維立方體(比如1080P的RGB影象就是1920x1080x3)。
#NumPy陣列的維數稱為秩,一維陣列的秩為1,二維陣列的秩為2,以此類推。
#在NumPy中,每一個線性的陣列稱為是一個軸(axes),秩其實是描述軸的數量。也就是說秩和軸是等價的。
#比如說,二維陣列相當於是兩個一維陣列,其中第一個一維陣列中每個元素又是一個一維陣列。
#所以一維陣列就是NumPy中的軸(axes),第一個軸相當於是底層陣列,第二個軸是底層數組裡的陣列。
#而軸的數量——秩,就是陣列的維數。
#建立陣列
#1.您可以使用該array函式從常規Python列表或元組建立陣列。結果陣列的型別是從序列中元素的型別推匯出來的。
test1=np.array([2,3,4])
test2=np.array((2.0,3.0,4.0))
print(test1)
print(test2)
print(test1.dtype,test2.dtype)
#將序列轉換成二維陣列或者三位陣列
test3=np.array([[1,2,3],[4,5,6]])#等價於np.array([(1,2,3),(4,5,6)])
print(test3)
#也可以在建立是指定其陣列的型別
test4=np.array([[1,2],[3,4]],dtype=np.complex)
print(test4)
#通常,陣列的元素最初是未知的,但其大小是已知的。因此,NumPy提供了幾個函式來建立具有初始佔位符內容的陣列。# 這些最小化了增長陣列的必要性,這是一項昂貴的操作
#該函式zeros建立一個充滿零的陣列
test5=np.zeros((3,4))
print(test5)
#該函式 ones建立一個充滿1的陣列
test6=np.ones((2,3,4))#三維
print(test6)
#該函式empty 建立一個數組,其初始內容是隨機的,預設情況下,建立的陣列的dtype是 float64。
test7=np.empty((2,3))
print(test7)
#arange
test8=np.arange(10,30)#可以兩個引數也可以三個引數,第三個引數代表的是步長
print(test8)
print(type(test8))#所以test8是陣列型別
#np.random.rand用[0,1]之間的數來均勻分佈
test9=np.random.rand(2,3,2)
test10=np.random.rand(3,2)
print(test9)
print(test10)
#np,random.randn這個是狀態分佈
test11=np.random.randn()
print(test11)
#列印陣列將以為數字列印成行,將二維陣列列印成矩陣,將三維陣列列印成矩陣列表
b=np.arange(6)
print(b)
c=np.arange(12).reshape(3,4)
print(c)
d=np.arange(12).reshape(2,2,3)
print(d)
#如果陣列太大而無法列印,那麼numpy會自動跳過陣列中心得部分並僅列印角落
print(np.arange(10000))

#基本操作
a=np.array([20,30,40,50])
b=np.arange(4)
c=a-b
d=b**2
e=10*np.sin(a)
print(c)
print(d)
print(e)
print(a<35)#判斷陣列中的每個元素返回值為Ture或者是Flase
f=np.random.random((2,3))
print(f)
print(f.sum())
print(f.min())
print(f.max())
g=np.arange(12).reshape(3,4)
print(g)
print(g.sum(axis=0))#axis=0表示的是列,axis=1,表示的是行
A=np.array([[1,1],
            [0,1]])#A是陣列
B=np.array([[2,0],
            [3,4]])#B是陣列
A1=np.mat(A)#A1代表的是矩陣
B1=np.mat(B)#B1代表的是矩陣
C=np.multiply(A,B)
C1=np.multiply(A1,B1)
#陣列和矩陣對應位置相乘,輸出與輸入陣列/矩陣的大小一致。
#兩個陣列運算,結果為一個數組,兩個矩陣運算,結果為一個矩陣。
D=np.dot(A,B)#dot是二維陣列的運算規則
D1=np.dot(A1,B1)
print(C)
print(C1)
print(D)
print(D1)

#同用功能
a=np.arange(3)
b=np.exp(a)#exp函式計算的是e的X次方
print(b)
c=np.sqrt(a)#開平方
print(c)
d=np.array([2,3,4])#相加
e=np.add(a,d)
print(e)

#索引,切片,迭代
a=np.arange(10)**3#每一個元素都進行三次方
print(a)
print(a[2])
print(a[2:5])
a[:6:2]=-1000#從開始到位置6,排他,將每2個元素設定為-1000
print(a)
#介紹一個函式np.fromfunction(
print(a[::-1])#順序取反)它的作用是從函式中建立陣列
def function(x,y):#x,y的值其實就是陣列的索引;
    return 10+x+y
a=np.fromfunction(function,(5,4),dtype=int)
print(a)
#多維陣列每個軸可以有一個索引,這些索引以逗號的元組給出。
print(a[2,3])#這種形式表的是一個元素
print(a[0:5,1])#按照軸數或者是秩數
print(a[:,1])#如果冒號前後沒有數字,那麼代表的是整個軸
print(a[1:3,:])
#當提供的索引少於軸的數量時,缺失的索引被認為是完整的切片 :;
print(a[-1])#等價於a[-1,:]
#對多維數字進行迭代(是針對第一個軸完成的)輸出的結果是每一個周的陣列
for row in a:
    print(row)
#如果想要對每一個元素進行迭代,可以使用flat屬性,作為陣列的所有元素的迭代器
for element in a.flat:
    print(element)
c=np.array([[[0,1,2],
             [10,12,13]],
            [[100,101,102],
            [110,112,113]]])
print(c.shape)
print(c[1,...])#等價於c[1,:,:]
print(c[...,2])#等價於c[:,:,2]
#改變陣列的形狀
a=np.floor(10*np.random.random((3,4)))#math.floor和np.floor函式的作用都是返回數字的下舍整數
print(a)
#可以使用各種命令更改陣列的形狀。請注意,以下三個命令都返回已修改的陣列,但不更改原始陣列:
print(a.ravel())#按照一行一行的輸出
print(a.reshape(6,2))#重新設定格式
print(a.T)#裝置,
#堆疊不同的陣列
a=np.floor(10*np.random.random((2,2)))
b=np.floor(10*(np.random.random((2,2))))
c=np.vstack((a,b))
d=np.hstack((a,b))#這兩個函式的作用是堆疊兩個陣列,當然這兩個陣列是同秩的,
#但也有不同,vstack是整體的堆疊,列數不變,行數增加,hstack是合併形式的堆疊,行數不變,列數變多。
print(a)
print(b)
print(c)
print(d)
from numpy import newaxis
e=np.column_stack((a,b))
print(e)
m=np.array([1,2])
n=np.array([3,4])
res=np.column_stack((m,n))
print(res)
#可以看出如果是二維陣列,那麼hstack和column_stack是相同的。
#將一個數組分割成幾個較小的陣列
a=np.floor(10*np.random.random((2,12)))
print(a)
b=np.hsplit(a,3)
print(b)
c=np.hsplit(a,(3,4))#這種形式是指定在第三列和第四列後分割
print(c)
'''