Numpy在运算的基础上,提供了一种简单易用的C API,因此很容易将数据传递给由低级语言编写的外部库,外部库也能用NumPy数组的形式返回给Python,这个功能让Numpy成为一个动态的,易用的库。
ndarry是一个同构数据多维容器,所有的元素必须是相同类型的。每一个数组都有一个shape(一个表示各维度大小的元组)和一个dtype(一个用于说明数组数据类型的对象)
1、使用array方法
import numpy as np
data1=[6,7.5,8,0,1]
arr1 = np.array(data1)
data2 = [[1,2,3,4],[5,6,7,8]]
arr2 = np.array(data2)
arr2.shape
除非显式说明,np.array会尝试给数组分配一个合适的数据类型,并将该类型分配到dtype对象中。
除了np.array之外,np.zeros和np.ones可以创建指定长度的numpy数组,empty可以创建一个不包含任意值的数组(注意,不是0),使用上述方法时,直接传入要创建的大小即可。
arange是range函数的数组版:
可以通过ndarry中的astype方法,显性的修改其dtype。
arr3 = np.array([1,2,3,4],dtype = 'int64')
arr3.dtype
float3 = arr3.astype('float64')
float3.dtype
arr = np.arange(10)
arr[5]
arr[5:8]=21
arr
需要注意的事是,数组切片是原始数组的视图,这意味着数据不会被复制,视图上的任何修改都会直接反应到原数组上。
arr2d = np.array([[1,2,3],[4,5,6],[7,8,9]])
arr2d[2]
arr2d[0,0]
arr1 = np.arange(15).reshape(3,5)
arr1.T
通用函数是一种对ndarry中的元素进行运算函数,如 sqrt 和 exp
a1 = np.arange(10)
e1 = np.exp(a1)
s1 = np.sqrt(e1)
这些都是一元unfc,还有一些是基于二维的unfc,例如add和maximum
x = np.random.randn(8)
y = np.random.randn(8)
z = np.maximum(x,y)
z
可以通过数组上的一组的数学函数对整个数组或某个轴向的数据进行统计运算,sum、mean、std等,这些函数既可以当数组的实例方法调用,也可以当顶级NumPy函数调用。
n1 = np.arange(1,5,0.5)
n2 = np.arange(5,10,0.5)
np.save('n1_array',n1)
l1 = np.load('n1_array.npy')
l1
np.savez('aa.npz',a=n1,b=n2)
aaa = np.load('aa.npz')
c = aaa['a']
c
sample = np.random.normal(size=(4,4))
sample
np.random模块可以生成各种各样的随机数,以上是利用normal函数生成标准正态分布分布。
先从一个简单的随机漫步开始,从0开始,步长1和-1的概率相等,先实现1000步的随机漫步。
import random
position = 0
walk = [position]
steps = 1000
for i in range(steps):
step = 1 if random.randint(0,1) else -1
position += step
walk.append(position)