Python数据科学包第一天(numpy)

1、numpy和pandas的作用

主要应用于数据分析的数据包,比python内置的数据类型,运算速度更快,数据包是基于C语言完成。numpy和pandas矩阵运算比单独元素计算要快。

2、安装

具体可以参考以下连接
Anaconda 使用指南
初学者如何自学Anaconda

3、numpy属性

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)

输出:

[[1 2 3]
 [2 3 4]]
number of dim: 2
shape: (2, 3)
size: 6

4、创建array

a=np.array(
    [2,23,4]
)
# 输出列表的时候没有逗号
print(a)
#默认的int是64位的,可以指定int32、int16
a=np.array([2,23,4],dtype=np.int)
print(a.dtype)
#小数,默认也是64位
a=np.array([2,23,4],dtype=np.float)
print(a.dtype)

a=np.zeros((3,4))
print(a)
a=np.ones((3,4),dtype = np.int16)
print(a)
#无限接近零的矩阵
a=np.empty((3,4))
print(a)
#类似python的range(),第三个参数是步长,不包括第二个元素
a=np.arange(10,20,2)
print(a)
a=np.arange(12).reshape((3,4))
print(a)
#1-10之间分20段
a=np.linspace(1,10,6)
print(a)

输出:

[ 2 23  4]
int32
float64
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]
[[1 1 1 1]
 [1 1 1 1]
 [1 1 1 1]]
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]
[10 12 14 16 18]
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
[ 1.   2.8  4.6  6.4  8.2 10. ]

5、numpy的基础运算

a=np.array([10,20,30,40])
b=np.arange(4)
#对应元素逐个相减
c=a-b
print(c)
d=b**2
print(d)
#对a的每个元素求sin()
e=10*np.sin(a)
print(e)
e=10*np.tan(a)

#判断不等于,每个元素如果小于3就是true,否则是false
print(b<3)
print(b==3)
#矩阵运算
a=np.array([[1,1],
            [0,1]])
b=np.arange(4).reshape((2,2))

print(a)
print(b)
# 逐个相乘
c=a*b
c_dot = np.dot(a,b)
print(c)
print(c_dot)
#另一种
d_dot = a.dot(b)
print(d_dot)

#随机数,1以内
a=np.random.random((2,4))
print(a)
print(np.sum(a))
print(np.min(a))
print(np.max(a))
#asix=0是在列中,1是在行中
print(np.sum(a,axis=1))
print(np.max(a,axis=1))
print(np.min(a,axis=0))

输出:

[ 1.   2.8  4.6  6.4  8.2 10. ]
[10 19 28 37]
[0 1 4 9]
[-5.44021111  9.12945251 -9.88031624  7.4511316 ]
[ True  True  True False]
[False False False  True]
[[1 1]
 [0 1]]
[[0 1]
 [2 3]]
[[0 1]
 [0 3]]
[[2 4]
 [2 3]]
[[2 4]
 [2 3]]
[[0.11190992 0.5160577  0.13761991 0.61471612]
 [0.8412749  0.39958057 0.69939541 0.06168831]]
3.3822428408476086
0.061688313221138213
0.8412749031281933
[1.38030365 2.00193919]
[0.61471612 0.8412749 ]
[0.11190992 0.39958057 0.13761991 0.06168831]

6、基础运算2

A=np.arange(2,14).reshape((3,4))
print(A)
#最小值索引
print(np.argmin(A))
#最大值索引
print(np.argmax(A))
#整个矩阵的平均值
print(np.mean(A))
print(A.mean())
print(np.average(A))
#0对于列进行计算平均数
print(np.mean(A,axis=0))


#中位数,中位数和平均值一样
print(np.median(A))

#当前元素与之前所有元素累加
print(np.cumsum(A))

#当前元素与前一个元素的累差
print(np.diff(A))

#输出非零行的位置
print(np.nonzero(A))
#排序,逐行排序,只排序各行
print(np.sort(A))

#矩阵的转置,但不能转置列表(一维矩阵)
print(np.transpose(A))
print(A.T)

print(A.T.dot(A))
#矩阵A中所有小于5的数都等于5,所有大于9的数都等于9
print(np.clip(A,5,9))

输出:

[[ 2  3  4  5]
 [ 6  7  8  9]
 [10 11 12 13]]
0
11
7.5
7.5
7.5
[6. 7. 8. 9.]
7.5
[ 2  5  9 14 20 27 35 44 54 65 77 90]
[[1 1 1]
 [1 1 1]
 [1 1 1]]
(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))
[[ 2  3  4  5]
 [ 6  7  8  9]
 [10 11 12 13]]
[[ 2  6 10]
 [ 3  7 11]
 [ 4  8 12]
 [ 5  9 13]]
[[ 2  6 10]
 [ 3  7 11]
 [ 4  8 12]
 [ 5  9 13]]
[[140 158 176 194]
 [158 179 200 221]
 [176 200 224 248]
 [194 221 248 275]]
[[5 5 5 5]
 [6 7 8 9]
 [9 9 9 9]]

7、numpy的索引

A = np.arange(3,15)
print(A)
print(A[3])

A = np.arange(3,15).reshape((3,4))
print(A)
#A矩阵的第三行
print(A[2])
#第一行第一列
print(A[1][1])
print(A[1,1])
#第二行所有数
print(A[1,:])
#第二列所有数
print(A[:,1])
#第二行,2-4的数
print(A[1,1:3])
#默认迭代矩阵A的行
for row in A:
    print(row)

#迭代矩阵A的列
for column in A.T:
    print(column)

print(A.flatten())
#迭代各项
for item in A.flat:
    print(item)
[ 3  4  5  6  7  8  9 10 11 12 13 14]
6
[[ 3  4  5  6]
 [ 7  8  9 10]
 [11 12 13 14]]
[11 12 13 14]
8
8
[ 7  8  9 10]
[ 4  8 12]
[8 9]
[3 4 5 6]
[ 7  8  9 10]
[11 12 13 14]
[ 3  7 11]
[ 4  8 12]
[ 5  9 13]
[ 6 10 14]
[ 3  4  5  6  7  8  9 10 11 12 13 14]
3
4
5
6
7
8
9
10
11
12
13
14

8、array的合并

A = np.array([1,1,1])
B = np.array([2,2,2])

#上下合并, vertical stack
C = np.vstack((A,B))
print(A.shape,C.shape)

#左右合并,horizontal stack
D = np.hstack((A,B))
print(D)
print(D.shape)
#在横向加一个维度,因为原本A是一维的(3),所以在那边加都会变成二维
print(A.shape)
print(A[np.newaxis,:],A[np.newaxis,:].shape)
#纵向加一个维度
print(A[:,np.newaxis],A[:,np.newaxis].shape)

#多矩阵合并
A = np.array([1,1,1])[:,np.newaxis]
B = np.array([2,2,2])[:,np.newaxis]

print(np.hstack((A,B,B)))
#0表示上下维度,1表示横向
C = np.concatenate((A,B,B,A),axis=1)
print(C)

输出:

(3,) (2, 3)
[1 1 1 2 2 2]
(6,)
(3,)
[[1 1 1]] (1, 3)
[[1]
 [1]
 [1]] (3, 1)
[[1 2 2]
 [1 2 2]
 [1 2 2]]
[[1 2 2 1]
 [1 2 2 1]
 [1 2 2 1]]

9、array分割

A = np.arange(12).reshape((3,4))
print(A)
#纵向分割,这里的axis的理解正好跟上面的相反 1表示纵向了
print(np.split(A,2,axis=1))
#横向分割另一种方法
print(np.hsplit(A,2))

#横向分割
print(np.split(A,3,axis=0))
print(np.vsplit(A,3))

#做不均匀分割,以上分割方法无法均匀分割
print(np.array_split(A,3,axis=1))

输出:

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
[array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11]])]
[array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11]])]
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
[array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2],
       [ 6],
       [10]]), array([[ 3],
       [ 7],
       [11]])]

10、赋值

a=np.arange(4)

b=a
c=a
d=b
#这个a默认是int,因此这么复制,第一个元素是0
a[0]=0.3
print(a,b,c,d)
a[0]=11
print(a,b,c,d)
#所有的起始都是a
#深度赋值
b=a.copy()
a[3]=44
print(a,b)

输出:

[0 1 2 3] [0 1 2 3] [0 1 2 3] [0 1 2 3]
[11  1  2  3] [11  1  2  3] [11  1  2  3] [11  1  2  3]
[11  1  2 44] [11  1  2  3]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值