文章目录
建议阅读相关书籍进行系统学习,此篇文章仅做个人总结之用。
- 《利用Python进行数据分析》——韦斯·麦金尼
- 莫凡的教程
多维数组对象
生成数组
- 生成数组:
np.array()
,dtype
默认为float64
转换数据类型:arr = np.array, arr.astype(np.int32)
,这一部操作是将float64转化为int32,且这个函数默认生成新数组 - 生成零数组:
np.zeros()
- 生成空数组:
np.empty()
- range 函数的数组版本:
np.arange(15).reshape(3,5)
- 生成一个线段:
a = np.linspace(1,10,20).reshape(3,4)
,生成一个20段1-10的数列(拆成20个数字) - 生成2行4列的属于(0,1)随机数组:np.random.random((2,4))
数组的运算
数组之间每个元素的运算,这里的每个数组尺寸应该相同,不同数组涉及到广播的知识,这里暂不做解释。
- 最大值/最小值/求和
np.sum(a, axis=1)
,np.min(a)
,np.max(a)
axis=1代表列,axis=0代表行 - 逐个比较两个数组的大小
x = np.random.randn(8)
y = np.random.randn(8)
print(np.maximum(x, y))
- 计算小数部分和整数部分
remainder,whole_part = np.modf(arr)
- 乘法:python的平方是用**表示
如果用矩阵的运算应该是np.dot(a,b)
或者a.dot(b)
,就不会是各个元素之间的乘法了。
具体的函数见书P207页
基础索引和切片
与列表相似,前闭后开,
与Python中列表的不同
- 传入数值给切片,python是不允许的,numpy是允许的
arr = np.arange(10)
arr[5:9] = 12
print(arr)
##################################
a = range(10)
a[5:9] = 12
print(a)
上面的运算结果:
[ 0 1 2 3 4 12 12 12 12 9]
下面的运算结果
TypeError: 'range' object does not support item assignment
list 是不能全部赋值的
2.浅拷贝和深拷贝: python中赋值是直接产生一个新的对象,但是numpy赋值不是,只是一个原数列的视图。改变复制过的,原数组也会被改变
例子:
a = list(range(10))
c = a[5:8]
c[1] = 12
print(a)
b = np.arange(10)
d = b[5:8]
d[1] = 12
print(b)
运行结果
[0, 1, 2, 3, 4, 5, 6, 7, 8