利用Python进行数据分析笔记-Numpy基础

这篇博客介绍了如何使用Python的Numpy库进行数据分析,包括创建n维数组、数组计算、索引和切片、布尔索引、通用函数、伪随机数、线性代数等内容。重点讲解了向量化操作、数组转置、矩阵乘法和矩阵分解等核心概念。
摘要由CSDN通过智能技术生成

跟着教程学习了一段时间数据分析,越学感觉坑越多。于是花了一个星期仔细看了下《利用Python进行数据分析》。写在这里主要是记录下,方便自己查看。

import matplotlib.pyplot as plt
import numpy as np

创建n维数组

1、使用array函数

最简单的方法使用array函数,输入一个序列即可,比如list

# 随机生成数据
data = np.random.randn(2, 3)
data
array([[ 1.8878077 , -0.09071248, -0.17286876],
       [-1.39093014, -1.82384125,  0.82493751]])

每一个数组都有一个shape,来表示维度大小。而dtype,用来表示data type:

# 多维数组
data2 = [[1, 2, 3, 4], [5, 6, 7, 8]]
arr2 = np.array(data2)
arr2
array([[1, 2, 3, 4],
       [5, 6, 7, 8]])
print('维度大小:',arr2.shape)
print('维度值:', arr2.ndim)
print('数据类型:',arr2.dtype)
维度大小: (2, 4)
维度值: 2
数据类型: int32

除非主动声明,否则np.array会自动给data搭配适合的类型,并保存在dtype里

也可以指定数据类型

arr1 = np.array([1, 2, 3], dtype=np.float64)
arr2 = np.array([1, 2, 3], dtype=np.int32)
print('arr1数据类型:',arr1.dtype)
print('arr2数据类型:',arr2.dtype)
arr1数据类型: float64
arr2数据类型: int32

用astype来转换类型,astype总是会返回一个新的数组

  • 把float变为int,小数点后的部分会被丢弃
int_arr1 = arr1.astype(np.int)
int_arr1.dtype
dtype('int32')

2、其它方法

除了np.array,还有一些其他函数能创建数组。比如zeros,ones,另外还可以在一个tuple里指定shape

np.zeros((3, 6))
array([[0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0.]])
# np.empty并不能保证返回所有是0的数组,某些情况下,会返回为初始化的垃圾数值,如下面
np.empty((2, 3, 2))
array([[[5.63e-322, 0.00e+000],
        [0.00e+000, 0.00e+000],
        [0.00e+000, 0.00e+000]],

       [[0.00e+000, 0.00e+000],
        [0.00e+000, 0.00e+000],
        [0.00e+000, 0.00e+000]]])
np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

数组计算

数组之所以重要,是因为不用写for循环就能表达很多操作,这种特性叫做vectorization(向量化)。任何两个大小相等的数组之间的运算,都是element-wise(点对点)

data = np.arange(5)
print('*:', data*10)
print('+:',data+data)
*: [ 0 10 20 30 40]
+: [0 2 4 6 8]
# 两个数组的比较会产生布尔数组:
arr1 = np.array([[1., 2., 3.], [4., 5., 6.]])
arr2 = np.array([[0., 4., 1.], [7., 2., 12.]])
arr2 > arr1
array([[False,  True, False],
       [ True, False,  True]])

索引和切片

一维数组操作同list,array的切片后的结果只是一个views(视图),用来代表原有array对应的元素,而不是创建了一个新的array。但list里的切片是产生了一个新的list

arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
arr2d[2]
array([7, 8, 9])
arr2d[2][1]
8
arr2d[:2]
array([[1, 2, 3],
       [4, 5, 6]])
# 前两行,第二列之后
arr2d[:2, 1:]
array([[2, 3],
       [5, 6]])
arr2d[:2, 2]
array([3, 6])
# 冒号表示提取整个axis(轴)
arr2d[:, :1]
array([[1],
       [4],
       [7]])
# 多维数组
arr3d = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
arr3d
array([[[ 1,  2,  3],
        [ 4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值