首页 > 其他 > 详细

2.5 numpy&pandas 笔记

时间:2020-02-06 00:19:52      阅读:73      评论:0      收藏:0      [点我收藏+]

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])

未完待续..................

 

2.5 numpy&pandas 笔记

原文:https://www.cnblogs.com/shish/p/12267186.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!