pip install numpy
安装.
import numpy as np
引入.
#2. 构造多维数组
np.arange(x)
np.array(list(range(x))
.np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
array()
的构造函数中.np.eye(3)
np.ones((2,3))
np.zeros(shape, dtype=float, order='C')
tile(A, reps)
将A矩阵当作一个元素, 按照重复规则生成新的复合矩阵.如arr=np.tile([[1,2],[3,4]], [2,3])
print arr
"""
[[1 2 1 2 1 2]
[3 4 3 4 3 4]
[1 2 1 2 1 2]
[3 4 3 4 3 4]]
"""
##2.1 ndarray的shape
print np.array([1,2]).shape #(2L,)
print np.array([[1,2]]).shape #(1L, 2L)
# 注意这两种的区别, 前者是一维数组, 后者是二维数组.
np.reshape(a, newshape, order='C')
expand_dims(a, axis)
Examples
--------
>>> x = np.array([1,2])
>>> x.shape
(2,)
>>> y = np.expand_dims(x, axis=0)
>>> y
array([[1, 2]])
>>> y.shape
(1, 2)
##2.2 ndarray的axis
ndarray是多维的, axis=i 就指定了第i个维度. 很多计算函数都有axis参数可以指定, 得到不同的计算结果.
对于2维数组, 如果axis=0,则沿着纵轴进行操作;axis=1,则沿着横轴进行操作。
但如果是多维的呢?可以总结为一句话:设axis=i,则numpy沿着第i个下标变化的方向进行操作。
if axis=-1
it will be the last dimension.
#axis参数对计算结果的影响
a
Out[178]:
array([[1, 2],
[3, 4],
[5, 6]])
np.mean(a,axis=0)
Out[179]: array([ 3., 4.])
np.mean(a,axis=1)
Out[180]: array([ 1.5, 3.5, 5.5])
np.mean(a)
Out[181]: 3.5
arr[截取表达式]. 用法见图3-1 .
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-30Y7pzI9-1578808794071)(http://www.scipy-lectures.org/_images/numpy_indexing.png)]
图3-1 ndarray截取示意图
np.stack(tuple)
来将若干个ndarray拼接在一起.a = np.array([1, 2, 3])
b = np.array([2, 3, 4])
np.stack((a, b))
>>> array([[1, 2, 3],
[2, 3, 4]])
np.hstack(tuple)
即可. 如 a.shape=(3,4), b.shape=(3,1)
, 那么拼接后的shape为(3,5)
.from numpy import random
##4.1常用函数
random.standard_normal(size)
Draw samples from a standard Normal distribution (mean=0, stdev=1), 即标准正态分布.
random.uniform(a,b)
Get a random number in the range [a, b). By default, it’s [0,1)
random.randint(low, high=None, size=None, dtype=‘l’)
产生[low,high)范围的int型随机数. 返回类型为int 或 ndarray.
random.choice(a, size=None, replace=True, p=None)
从一维数组a中按均匀分布作随机采样.
from numpy import random
arr=random.standard_normal((2,3))
print(arr.__class__,'\n',arr)
num = random.uniform(0,1)
print(num.__class__,num)
"""
[[ 0.27243397 -0.83744812 -0.33860031]
[-1.36952477 -1.06641186 -0.4565501 ]]
0.06643459053873624
"""
#5.常用运算
# 这些常用运算既可以对一个数计算, 也可以对 数组,矩阵中 每一个元素分别计算
np.tanh(x) #求双曲正切
np.sqrt(x) #求平方根
np.log(x) #求e为底的对数
np.log2(x) #求2为底的对数
np.log10(x) #求10为底的对数
np.power(a,b) # 求a^b
np.abs(x) #求x中每个元素的绝对值, 返回同尺寸的ndarray.
数组间运算
a.shape=(m,n) b.shape=(n,)
a.shape=(m,n) b.shape=(m,n)
, a*b
与 np.multiply(a,b)
等价, 结果的shape=(m,n)
.度&弧度
np.sin()
"""角度(angle) 有两种表示,度(degree) 和 弧度(radian).
弧度:度 = pi:180 = 3.1415:180
这里计算的是弧度.
所以想计算正弦30°需要np.sin(30*np.pi/180)"""
x = (0,1,5)
np.var(x) # 方差=4.66
np.mean(x) # 均值=2
np.median(x) # 中位数
np.std(x) # 标准差,即 np.sqrt(np.var(x))
import numpy as np
line1=(1,2,3)
line2=(4,5,6)
# 打印矩阵
arr=np.array([line1,line2])
print arr
print arr.ndim,#秩
print arr.I,#逆矩阵
print arr.inverse(),#逆矩阵
print arr.transpose(),#逆矩转置
print arr.T,#逆矩转置
print arr.size ,#元素个数
print arr.shape ,#矩阵大小,2*3
print type(arr)
#coding=utf-8
import numpy as np
a=np.array([[1,2],
[3,4]])
b=np.array([[5,6],
[7,8]])
print a+b #对应元素相加
print a-b #对应元素相减
print np.dot(a,b) #矩阵乘法
print a*b #对应元素相乘
print a**2 #每个元素求平方
print a.sum() #所有元素相加,得到一个type 'numpy.int32'
print a.sum(axis=0) #每列元素相加
print a.sum(axis=1) #每行元素相加
import numpy as np
# 勾三弧四的直角三角形的两条边
a = np.array([3, 0])
b = np.array([3, 4])
sim = np.dot(a.T, b) / (np.linalg.norm(a) * np.linalg.norm(b))
print('cosine : {0}'.format(sim))
"""cosine : 0.6"""
import numpy as np
np.cross(a,b) # 叉乘, 0说明两向量共线(角度为0或180)
np.dot(a,b) #点乘, 0说明正交
np.linalg.norm(a) # 向量a的模
#6. ndarray与matrix
凡是用能matrix的应该都能用ndarray.
ndarray可以是多维的, 而matrix只能是二维的.
matrix.I
矩阵的逆
mat1*mat2
矩阵的乘法.
#coding=utf-8
import numpy as np
arr1=np.array([[1,2],
[3,4]])
arr2=np.array([[1,2],
[3,4]])
mat1=np.matrix(arr1)
mat2=np.matrix(arr2)
print mat1*mat2 #矩阵乘法,对应np.dot(a,b)
print ('Inverse',mat1.I) #矩阵的逆
# 一维 nd-array 与 str 互转的例子
a=np.array([1,2])
a_str = ','.join([str(x) for x in a])
print(a_str)
b=np.fromstring(a_str,sep=',')
print(b)
print( (a==b).all() )
"""
1,2
[ 1. 2.]
True
"""
np.set_printoptions(edgeitems=100)
np.set_printoptions(linewidth=300)