https://www.bilibili.com/video/av16378934?from=search&seid=9658415144190341605
pandas && numpy
1. 属性以及创建矩阵
import numpy as np
array = np.array([[1,2,3],
[2,3,4]]) #建立一个矩阵(注意‘[]‘的数量)
print(array)
print(‘number of dim‘, array.ndim) #矩阵的维数
print(‘shape‘, array.shape) #矩阵的形状
print(‘size‘, array.size) #矩阵的大小,数据个数
a = np.array([2,23,4], dtype=np.int) ##int32,32位int @1
a1 = np.zeros((3,4), dtype=np.int32) #3行4列的全为0, 32位int类型数据
a2 = np.ones((3,4), dtype=np.int32) #3行4列的全为1, 32位int类型数据
a3 = np.arange(10, 20, 2) #生成从10到20(取不到20)的步长为2的数列
a4 = np.arange(12).reshape((3,4)) #生成从0到11的,3行4列的矩阵
a5 = np.linspace(1, 10, 5) #生成线段,生成从1到10一共5段线段
# Out[13]: array([ 1. , 3.25, 5.5 , 7.75, 10. ])
2. 基础运算
import numpy as np
a = np.array([10,20,30,40])
b = np.arange(4) #[0,1,2,3]
c = a - b #减法
d = a + b #加法
e = a * b #乘法注意不是矩阵乘法
f = b**2 #次方
g = 10*np.sin(a) #sin与cos用法一样
print(b < 3) #[ True True True False]
a1 = np.array([[1,1],
[0,1]])
b1 = np.arange(4).reshape((2,2))
c1 = a1 * b1 #逐个相乘 array([[0, 1],
# [0, 3]])
c1_dot = np.dot(a1, b1) ##矩阵乘法 array([[2, 4],
# [2, 3]])
c1_dot_2 = a.dot(b) ##另一种写法 个人觉得可读性较差
a3 =
a2 = np.random.random((2,4))#array([[0.41322246, 0.70201529, 0.3669404 , 0.24802252],
#[0.3022681 , 0.89514217, 0.63173225, 0.57511299]])
x = np.sum(a2, axis=1) #求和,axis=1表示以取行元素, axis=0表示以列取元素,Out[24]: array([1.73020067, 2.4042555 ])
x1 = np.min(a2, axis=0) #最小值 array([0.3022681 , 0.70201529, 0.3669404 , 0.24802252])
x2 = np.max(a2, axis=1) #最大值array([0.70201529, 0.89514217])
import numpy as np
a = np.arange(2, 14).reshape((3,4))
print(np.argmin(a)) ##最小值的索引位置 0
print(np.argmax(a)) ##最大值的索引位置 11
print(‘平均值‘,np.mean(a)) ##平均值 或者 a.mean()
print(np.average(a)) ##平均值
print(‘中位数‘,np.median(a)) ##中位数 7.5
print(‘累加‘,np.cumsum(a)) ##累加依次相邻两个数之和 [ 2 5 9 14 20 27 35 44 54 65 77 90]
print(‘累差‘,np.diff(a)) ##相邻两个数之间的差值
#累差 [[1 1 1]
#[1 1 1]
#[1 1 1]]
print(‘输出非零数据的行数和列数‘,np.nonzero(a))
#行数:(array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int64),
#列数: array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64))
print(‘转置‘,np.transpose(a)) ##矩阵转置
print(‘类似二值化‘,np.clip(a, 5, 9)) ##类似二值化 小于5的数变成5,大于9的数变成9
#[[5 5 5 5]
# [6 7 8 9]
# [9 9 9 9]] 如果数据相反就只有大于5的变5而不是小于9的变9
a1 = np.array([[1,4,2,7],
[3,1,5,8],
[8,3,5,6]])
print("排序", np.sort(a1)) ##注意逐行排序
# [[1 2 4 7]
# [1 3 5 8]
# [3 5 6 8]]
3.numpy的索引
import numpy as np
a = np.arange(3,15).reshape((3,4))
##如果是数列的话直接a[n]
print(a[2]) ##输出第二行所以数据
print(‘等同于‘,a[2, :])
print(a[2][2]) ##输出第二行第二列
print(a[2, 1:3])##第二行第一列到第二列
##迭代行
for raw in a:
print(raw)
##迭代列
for column in a.T: ##a.T 相当于 np.transpose(a) a的转置
print(column)
##迭代项
print(‘将矩阵转换成一行的序列‘, a.flatten()) ## 返回序列[ 3 4 5 6 7 8 9 10 11 12 13 14]
for item in a.flat: ##flat() 返回的是一个生成序列的迭代器
print(item)
4.numpy 合并
import numpy as np
a = np.array([1,1,1])
b = np.array([2,2,2])
print(‘上下的合并‘,np.vstack((a,b,c))) ## 注意需要括号将合并的数据括起来
#[[1 1 1]
# [2 2 2]]
print(‘左右合并‘,np.hstack((a,b,c))) ##[1 1 1 2 2 2]
##注意transpose无法将序列转换为列
#需要如下操作
a1 = np.array([1,1,1])[:,np.newaxis] #或者reshape(n,1)也可以
a2 = np.array([2,2,2])[:,np.newaxis]
print(np.hstack((a1,a2)))
#[[1 2]
# [1 2]
# [1 2]]
print(‘总的合并方法(在newaxis方法下)‘,np.concatenate((a1,a2),axis=1)) ##(在newaxis方法下)才能使用,1行0列
就newaxis方法进行如下解释
首先newaxis作用是增加维度
详解:np.newaxis在[]中第几位,a.shape的第几维就变成1,a的原来的维度依次往后排。
例子:若a.shape=(a ,b, c)
a[:, np.newaxis].shape= (a, 1, b, c)
a[:, np.newaxis, np.newaxis].shape= (a, 1, 1, b, c)
a[np.newaxis, :].shape= (1, a, b, c)
a[np.newaxis, np.newaxis, :].shape= (1, 1, a, b, c)
a[np.newaxis, :, np.newaxis].shape= (1, a, 1, b, c)
a[np.newaxis, :, np.newaxis, :].shape= (1, a, 1, b, c)
a[:, :,np.newaxis].shape= (a, b,1, c)
另外
np.newaxis=None
a[np.newaxis, :, np.newaxis, :].shape == a[None,:,None,:]
如下是具体例子:
import numpy as np
a = np.array([1,1,1])
a1 = a[:,np.newaxis]
b = np.array([2,2,2])
b1 = b[np.newaxis,:]
print(a.shape, a)
print(a1.shape)
print(a1)
print(b.shape, b)
print(b1.shape)
print(b1)
结果
(3,) [1 1 1]
(3, 1)
[[1]
[1]
[1]]
(3,) [2 2 2]
(1, 3)
[[2 2 2]]
c = np.array([[1,1,1],[2,2,2]]) c1 = c[:,np.newaxis] d = np.array([[2,2,2],[3,3,3]]) d1 = d[np.newaxis,:] print(c.shape) print(c) print(c1.shape) print(c1) print(d.shape) print(d) print(d1.shape) print(d1)
结果
(2, 3)
[[1 1 1]
[2 2 2]]
(2, 1, 3)
[[[1 1 1]]
[[2 2 2]]]
(2, 3)
[[2 2 2]
[3 3 3]]
(1, 2, 3)
[[[2 2 2]
[3 3 3]]]
5.numpy的array分割
import numpy as np
a = np.arange(12).reshape((3,4))
print(a)
##没有整除会报ValueError
print(np.split(a, 2, axis=1)) ##将a按照列数平均分成两份,每取一行分成两半
print(np.split(a, 3, axis=0)) ##将a按照行数平均分成3分,每取一列分成3分
#[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
##不等量分割
print(np.array_split(a,2,axis=0))
#[array([[0, 1, 2, 3],
# [4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
print(np.array_split(a,[1,3],axis=1))##按照第一份分0列,第二份分1,2列,第三份分第3列([]相当于切片,索引)
print(‘上下分割也就是按照行分割‘,np.vsplit(a,3))
print(‘左右分割也就是按照列数分割‘,np.hsplit(a,2))
6. nump的copy以及deep_copy
In [1]: import numpy as np
In [2]: a = np.arange(4)
In [3]: b = a
In [4]: a
Out[4]: array([0, 1, 2, 3])
In [5]: b
Out[5]: array([0, 1, 2, 3])
In [6]: a[0] = 11
In [7]: a
Out[7]: array([11, 1, 2, 3])
In [8]: b
Out[8]: array([11, 1, 2, 3])
In [9]: b is a
Out[9]: True
In [10]: b[1:3] = [22,33]
In [11]: b
Out[11]: array([11, 22, 33, 3])
In [12]: a
Out[12]: array([11, 22, 33, 3])
In [13]: c = a.copy() ##deep_copy
In [14]: a[3] = 44
In [15]: a
Out[15]: array([11, 22, 33, 44])
In [16]: c
Out[16]: array([11, 22, 33, 3])
未完待续..................
原文:https://www.cnblogs.com/shish/p/12267186.html