numpy

a = [[1,2,3], [4,5,6]]
b = np.array(a, dtype=int/int32/float/float32)
b.shape
b.size
b.ndim

c=np.zeros((2,3)) #2行3列, 0矩阵
c=np.ones((2,3)) #2行3列 , 1矩阵
c=np.empty((2,3)) #几乎接近于0的矩阵
c = np.arange(10,20,2) #和py里的range一样, 2是步长
c = np.arange(12).reshape((3,4))
c = np.linspace(1, 10, 20) #生成20个数字
c = np.linspace(1,10,20).reshape((2,3))


运算
a = np.array([10,20,30,40])
b = np.arange(4)
c = a - b #[10,19,28,37]
c = a+b # [10,21,32,43]
c = b**2 #平方 [0,1,4,9]
c = np.sin(a) #对 a每个求sin,类似 cos, 等三角函数

print(b<3) # [True, True, True, False]
print( b==2)

a = np.array([[1,1], [0,1]])
b = np.arange(4).reshape((2,2)) [[0,1], [2,3]]
c = a*b #逐个相乘 [[0,1], [0, 3]]

 

确认矩阵是否可以相乘。只有第一个矩阵的列的个数等于第二个矩阵的行的个数,这样的两个矩阵才能相乘

矩阵A和矩阵B相乘得到的矩阵,与矩阵A有相同的行数,与矩阵B有相同的列数。

计算第一个“点”。要计算矩阵中的第一个“点”,你需要用第一个矩阵第一行的第一个数乘以第二个矩阵第一列的第一个数,第一行的第二个数乘以第一列的第二个数,第一行的第三个数乘以第一列的第三个数,然后将这三个结果加到一起,得到第一个点。

 

++++++++++++++++++

用左边矩阵的第一行,逐个乘以右边矩阵的列,第一行与第一列各个元素的乘积相加,第一行与第二列的各个元素的乘积相加。。。。

第二行也是,逐个乘以右边矩阵的列。。。。

第三行。。。

+++++++++++++++++

 

c = np.dot(a, b) #矩阵乘法 np.matmul [ [2,4], [2,3] ] 必须是正方形矩阵
c = a.dot(b) #和上面一样

a = np.random.random((2,4)) #2行4列的随机数
a = np.sum(a, axis=1) #列的和, axis=0是行的和
np.sum, np,min, np.max,

运算222222222222222222222222222
a = np.arange(2,14).reshape((3,4))
np.argmin(a) #a最小值索引 = 0, 第1个(0位)
np.argmax(a) # =11, 第12个
np.mean(a) #平均值 或者
a.mean() 和上面一样 7.5
np.average(a) 和上面一样, 老版本指令 7.5
np.median(a) 中位数 7.5
np.cumsum(a) 累加数[2,5,9,14,20,27,35,44,54,65,77,90] 虽然原始a是多行多列, 值只有一行
np.diff(a) 累差[[1,1,1], [1,1,1],[1,1,1]] 相邻2个数的差 4列变成了3列
np.nonzero(a) (array([0,0,0,0,1,1,1,1,2,2,2,2]), array([1,2,3,4,0,1,2,3,0,1,2,3]))
np.sort(a) 排序 逐行排, 每行之间不干预
np.transpose(a) 矩阵反向, 行变成列, 列变成行.
a.T 和上面一样, 行变成列, 列变成行.

(a.T).dot(a)

np.clip(a, 5, 9) 使结果里,小于5的等于5, 大于9的等于9
np.mean(a, axis=0) 对列进行计算, axis=1对行计算

索引.....................................................................................................
a = np.arange(3,15).reshape((3,4))
a[2][3]
a[2,3] 和上面一样的功能
a[2, :] 第2行的所有数
for row in a:
print(row)

for column in a.T: #转置后迭代行, 也就是原始的列
print(column)
a.flatten() 按个返回. a.flat 迭代器
for item in a.flat: #矩阵转成单行
print(item)

array的合并.........................................................................................

a = np.array([1,1,1])
b = np.array([2,2,2])
np.vstack((a,b)) [[1,1,1], [2,2,2]] 合并了 a+b不是合并而是加, vertical, 不需要axis
np.hstack((a,b)) 2个的合并??也可以3以上个合并.. horizontal

a[np.newaxis, :] 对a加了一个维度
a[: , np.newaxis] 对 a加纵向的维度
c = np.concatenate((a,b,b,a), axis=0) 0纬度上进行合并 可以进行多个的合并.


array的分割..........................................................................................
a = np.arange(12).reshape((3,4))
np.split(a, 2, axis=1) 分2块, 纵向分
np.array_split(a, 3, axis=1) 进行不等项的分割
np.vsplit(a, 3) 不需要axis了,因为vertical
np.hsplit(a, 2)

array的复制.............................................................................................
a = np.arange(4)
b=a
c=a
d=b

input: b is a, result: true
a里面的改变, b, c都会一起改变, d也会改变 d is a : true
d改变后, a,b,c也会改变

b = a.copy() #deep copy 赋值但是没有关联

 

posted @ 2019-02-19 07:46  CrossPython  阅读(1193)  评论(0编辑  收藏  举报