002.python科學計算庫numpy(下)
阿新 • • 發佈:2018-12-09
reshape
import numpy as np
# arange 在給定的間隔內返回等距值
# reshape 返回一個包含具有新形狀的相同資料的陣列
a = np.arange(15).reshape(3, 5)
print(a)
arange
import numpy as np
# arange 在給定的間隔內返回等距值
print(np.arange(10, 30, 5))
reshape
import numpy as np
# reshape 返回一個包含具有新形狀的相同資料的陣列
a = np.arange(15).reshape(3 , 5)
print(a)
陣列常用屬性
import numpy as np
a = np.arange(15).reshape(3, 5)
# 陣列維數
print(a.ndim)
# 陣列中元素的型別名稱
print(a.dtype.name)
# 陣列中總的元素數量
print(a.size)
陣列初始化
import numpy as np
from numpy import pi
# 初始化一個數組,zeros的引數是元組
print(np.zeros((3, 4)))
print("---------")
# 初始化陣列為1,並指定元素型別
print(np.ones((2, 3, 4), dtype=np.float))
print("---------")
# 返回一個指定空間的隨機的(0到1)陣列
print(np.random.random((2, 3)))
print("---------")
# 在0和2*pi之間平均切分出15個元素
print(np.linspace(0, 2 * pi, 15))
陣列間算術運算
import numpy as np
a = np.array([20, 30, 40, 50])
b = np.arange(4)
# 陣列之間空間大小相同可以進行算術運算
print(a - b)
print("----" )
print(a * b)
print("----")
# 每個元素都進行乘法操作
print(b * 2)
print("----")
# 每個元素都進行指數操作
print(b ** 3)
print("----")
# 兩個陣列的點積 = np.sum(a * b)
print(a.dot(b))
print(np.sum(a * b))
print(np.dot(a, b))
print("----")
exp
import numpy as np
b = np.arange(5)
# 計算輸入陣列中所有元素的指數 e ** 元素的值
print(np.exp(b))
sqrt
import numpy as np
b = np.arange(5)
# 返回陣列的非負平方根,按元素計算。
print(np.sqrt(b))
floor
import numpy as np
# 向下取整
a = np.floor(10 * np.random.random((3, 4)))
print(a)
print(a.shape)
print("-----")
ravel
import numpy as np
# 向下取整
a = np.floor(10 * np.random.random((3, 4)))
# 返回一個平坦矩陣
print(a.ravel())
print(a.ravel().shape)
resize/shape
import numpy as np
# 向下取整
a = np.floor(10 * np.random.random((3, 4)))
# 改變a的結構
a.shape = (6, 2)
print(a)
print("-----")
# 改變陣列的形狀和大小
a.resize((2, 6))
print(a)
print("-----")
# a的轉置矩陣
print(a.T)
hstack
import numpy as np
a = np.floor(10 * np.random.random((3, 3, 5)))
b = np.floor(10 * np.random.random((3, 3, 5)))
c = np.floor(10 * np.random.random((3, 5)))
d = np.floor(10 * np.random.random((3, 5)))
print("a=", a, "\n")
print("b=", b, "\n")
# 水平(按列排列)排列。它相當於沿著第二軸的連線
# 這個函式對於3維的陣列最有意義。
# 例如,對於具有高度(第一軸)、寬度(第二軸)和r/g/b通道(第三軸)的畫素資料。
# 函式“concatenate”、“stack”和“block”提供了更一般的堆疊和連線操作。
print("ab=", np.hstack((a, b)))
print("cd=", np.hstack((c, d)))
hsplit
import numpy as np
a = np.floor(10 * np.random.random((2, 12)))
print("a=", a)
print("------")
# 水平地將一個數組拆分為多個子陣列(按列排列)。
# 請參考“split”文件。 'hsplit '相當於 np.split(axis=1),
# 陣列總是沿著第二個軸分裂,而不管陣列的大小。
print(np.hsplit(a, 3))
print("----")
# hsplit第二個引數是個元組的時候,表示split的索引列
# 下面這個就是在 列索引號為 3,5,8的地方進行拆分
print(np.hsplit(a, (3, 5, 8)))
print("----")
a = np.floor(10 * np.random.random((2, 2, 4)))
print("a=", a)
# hsplit的第二個引數,如果不是元組或者是一個引數的元組
# 此引數必須可以讓陣列的第1軸的維數整除
print(np.hsplit(a, 2))
=
import numpy as np
a = np.arange(12)
# 使用等號賦值,不同引用操作的地址相同
b = a
print(b)
print(b is a)
b.shape = (3, 4)
print(a.shape)
print(id(a), id(b))
view
import numpy as np
a = np.arange(12)
# view檢視方法建立一個新的陣列物件,該物件具有相同的資料
c = a.view()
print(c)
print(c is a)
print(a)
# a/b的地址不一樣
print(id(a), id(c))
# 但是修改其中一個值之後,另一個也同步修改
c[3] = 333
print("a=", a)
a[6] = 666
print("c=", c)
c.shape = (3, 4)
c[0] = 0
print(a)
copy
import numpy as np
a = np.arange(12)
# copy返回陣列的副本
d = a.copy()
print(d)
print(d is a)
d.shape = (3, 4)
print(id(a), id(d))
d[1] = 111
a[0] = 1000
# 修改任一值均不會影響另一個
print("a=", a)
print("d=", d)
argmax
import numpy as np
data = np.sin(np.arange(20)).reshape(5, 4)
print(data)
print(data.shape) # (5, 4)
# 沿給定軸(第0軸)的最大值的返回索引,將返回shape=(4,)的陣列
ind = data.argmax(axis=0)
print(ind, ind.shape)
# 沿給定軸(第1軸)的最大值的返回索引,將返回shape=(5,)的陣列
ind = data.argmax(axis=1)
print(ind, ind.shape)
tile
import numpy as np
a = np.arange(0, 40, 10)
print(a, "\n")
# 通過重複代表給出的次數來構造陣列。
b = np.tile(a, (1, 4))
print(b)
argsort
import numpy as np
a = np.array([4, 3, 1, 2])
# 返回對陣列進行排序的索引。
# 最小的1索引為2,最大的4索引為0
b = np.argsort(a) # [2 3 1 0]
print(b)
# 排序後的陣列
print(a[b])