python numpy 注意事项

1、初始化矩阵的时候,如果矩阵为复数,则需要

np.zeros((N,M,L),dtype=complex) 指明矩阵类型,否则赋值的时候会提示ComplexWarning: Casting complex values to real discards the imaginary part

2、矩阵赋值的时候,numpy默认为行向量赋值,这是跟matlab很不一样的一点

例如:

X = np.zeros((N,M),dtype=complex)

a = np.ones((N,1))

这时如果写X[:,1] = a,则会报错ValueError: could not broadcast input array from shape (N,1) into shape (N)

相反,如果你对a转置,变成行向量,再赋值则没有问题

3、要习惯numpy矩阵索引是从0:N-1的

4、行向量、列向量的关系

a = np.array([1,2,3])       a.shape   输出   (3,)

b = np.array([[1,2,3]])     b.shape   输出   (1,3)

c = np.ones((1,3))          c.shape   输出   (1,3)

d = np.array([[2],[5],[8]]) d.shape   输出   (3,1)

 

a+c            输出array([[2., 3., 4.]])  shape  (1,3)

b+c            输出array([[2., 3., 4.]])  shape  (1,3)

d+c            输出array([[3., 3., 3.],    shape (3,3)
                                   [6., 6., 6.],
                                   [9., 9., 9.]])

a+d            输出array([[ 3,  4,  5],    shape (3,3)
=b+d                           [ 6,  7,  8],
                                   [ 9, 10, 11]])

a+b            输出array([[2, 4, 6]])      shape(1,3)

结论:

1)   a这种size为(3,)的向量其实可以当做行向量来处理,与行向量c相加为行向量,与列向量d相加为矩阵

2)   还有一种情况会出现向量的size是一个数的,就是从矩阵里取一列或一行,此时不管是取列还是行,size都是(m,),也就是说都是行向量的形式。此后再利用这个列或者行去做运算,如果结果为向量,那么这个向量的size都是(m,)这种形式的。

 例如:e.shape 是(3,3)  则e[:,2].shape 和 e[1,:].shape 都是(3,)

但是矛盾的是,此时,假设有g = e[1,:] shape为(3,)  如果把g当做行向量的话,把e和g做矩阵乘法,按照线性代数想法是不能运算的,但是却可以运算

e.dot(g)
Out[133]: array([ 86, 149, 212])

e.dot(g).shape
Out[134]: (3,)

且shape 为(3,)

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值