生成数组声明的方式
score = np.array([[1, 2, 3], [4, 5, 6]])
score = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.float32)
score = np.array([["q", "a", "z"], ["b", "c", "d"]], dtype=np.string_)
# linespace(开始, 结束, 个数)
score = np.linespace(0, 100, 11)
# arange(start, stop, step, dtype)
score = np.arange(0, 100, 2)
# logspace(start, stop, num) 生成以10的N次幂数组。
# 每个数都是10的几次方,在0和3之间,生成2个数
score = np.arange(0, 3, 2)
数据类型
np.string_
np.unicode_
np.object_
np.float32
ndarray的属性
print(type(score)) # 打印类型 numpy.ndarray
print(score.shape) # shape 数组维度元组,2*3的维度,打印结果:(2, 3)
print(score.ndim) # ndim 数组维数,打印结果:2
print(score.size) # size 数组中元素数量,打印结果:6
print(score.itemsize) # itemsize 一个元组元素的长度(字节),打印结果4
print(score.dtype) # dtype 数组元素的类型,打印结果int32
基本操作
# 生成0或1的数组, one = np.ones([3, 4])
zero = np.zeros([3, 4])
# 生成类似的数组, zero = np.zeros_like(one)
one = np.ones_like(zero)
# 深拷贝array和浅拷贝asarray数组,深拷贝原数组改变不会跟着改变
a1 = np.array(one)
a2 = np.asarray(one)
切片与形状变形
切片
stock_change = np.random.normal(0, 1, (4, 5))
print(stock_change[0, 0:3]) # 切片只取一行三列。
print(stock_change[0:2, 0:2])
print(stock_change)
变形
# reshape,把数据改成5行4列。-1代表不管几行,最后数据分成2列,结果新生成一个数组
stock_change = stock_change.reshape([5, 4])
stock_change.reshape([-1, 2])
# resize,和reshape没什么区别,resize在原数组上修改
stock_change.resize([5, 4])
# 数组转置,获取数组几行几列元组
print(stock_change.T)
print(stock_change.shape)
print(stock_change.T.shape)
数据类型修改
stock_change = np.random.normal(0, 1, (4, 5))
print(stock_change)
stock_change = stock_change.astype(np.int32)
print(stock_change)
print(stock_change.tostring())
数据去重
stock_change2 = np.array([[1, 2, 3, 4, 5], [3, 4, 5, 6, 7]])
print(np.unique(stock_change2))
运算
逻辑运算
stock_change = np.random.normal(0, 1, (8, 10))
stock_c = stock_change[0:5, 0:5]
print(stock_c)
print(stock_c>1)
条件判断赋值
stock_c[stock_c>1] = 2
其它运算
- np.any(stock_change>0) # 所有数据都大于0为真
- np.all(stock_change>0) # 只要有一个数据大于0就为真
- np.where(stock_change>0, 1, 0) # 大于0的数据赋值1,否则赋值0
- np.where(np.logical_and(stock_change>0.5, stock_change<1), 1, 0) # and运算
- np.where(np.logical_or(stock_change>0.5, stock_change<1), 1, 0) # or运算
- stock_change.max(axis=1) # axis=1行或axis=0列求最大数
- stock_change.argmax() # 求最大值的下票
- stock_change.argmax(axis=1) # 按行求最大值的下标
- stock_change.min(axis=1) # axis=1行或axis=0列求最小数
- stock_change.median() # 中位数
- stock_change.std() # 标准差
- stock_change.var() # 方差
- stock_change.mean() # 均值
矩阵运算
- stock_change + 1
- stock_change / 1
- np.matmul(a, b) # 矩阵相乘,不支持矩阵和数字的相乘
- np.dot(a, b) # 矩阵相乘, dot和matmul没区别,只是dot(a, 10)可以用数字相乘