numpy使用tips


numpy存在两种不同的数据类型——矩阵matrix和数组array,都可以处理行列表示的数字元素, matrix与MATLAB中matrices等价

1. numpy中二维数组不支持求逆运算

可以使用scipy中的linalg.inv()函数求逆

二维ndarray替代matrix结合scipy.linalg可以实现全部矩阵运算

2. 创建np.matrix

a = np.matrix('1 2';'3 4')
>>>[[1 2]
   [3 4]]

注意矩阵的换行是;隔开,内部数据以字符串形式,矩阵元素之间以空格隔开, 数据可以是数组

3. 列表转array

temp = np.array(list)
arr = temp.tolist()

4. numpy.nditer迭代数组

提供灵活访问一个或多个数组元素的方式

for x in np.nditer(a):
	print(x, end=",")

控制遍历顺序

for x in np.nditer(a, order='F')# 列序优先
for x in np.nditer(a, order='C')# 行序优先

修改数组中的元素,需要指定为read-write 或 write-only模式

for x in np.nditer(a, op_flags=['readwrite']):
	x[...] = 2*x # 每个元素乘以2

使用外部循环,利用flags参数

  • c_index:跟踪行优先的索引
  • f_index:跟踪列优先的索引
  • multi_index:每次迭代跟踪一种索引类信息
  • external_loop:给出的值是具有多个值的一维数组,而不是零维数组

广播迭代:两个数组可广播,则nditer组合对象可以同时迭代他们

import numpy as np 
 
a = np.arange(0,60,5) 
a = a.reshape(3,4)  
print  ('第一个数组为:')
print (a)
print  ('\n')
print ('第二个数组为:')
b = np.array([1,  2,  3,  4], dtype =  int)  
print (b)
print ('\n')
print ('修改后的数组为:')
for x,y in np.nditer([a,b]):  
    print ("%d:%d"  %  (x,y), end=", " )
第一个数组为:
[[ 0  5 10 15]
 [20 25 30 35]
 [40 45 50 55]]


第二个数组为:
[1 2 3 4]


修改后的数组为:
0:1, 5:2, 10:3, 15:4, 20:1, 25:2, 30:3, 35:4, 40:1, 45:2, 50:3, 55:4,

5. numpy.outer 外积

a,b是两个数组,如果a,b高维则自动flatten为1维

a = [a1, …, am] and b = [ b1, …, bn]
result=[
[a1*b1, a1*b2,…,a1*bn]
[a2*b1, a2*b2,…,a2*bn]
…
[am*b1, am*b2,…,am*bn]
]
np.outer([1,2,3],[4,5,6])

np.outer([[1],[2],[3]],[4,5,6])

上面两句运行结果都是
array([[ 4,  5,  6],
       [ 8, 10, 12],
       [12, 15, 18]])

6. numpy.zeros_like() 创建全零的矩阵

创建一个矩阵,其维度与传入的矩阵一致,为其初始化为全0,无需参数制定shape大小

7. numpy矩阵相乘运算符@

作用相同与numpy.dot()

用于矩阵乘法

from numpy import array,dot
a=array([[1,2],
        [1,2]])
b=array([[5,6],
        [5,6]])
print(a@b)
print(dot(a,b))

out:
[[15 18]
 [15 18]]
[[15 18]
 [15 18]]

特殊用法:当第二个位置为向量时(1行n列的矩阵),则向量会转置

from numpy import array,dot
f=array([1,2]) #1*2
g=array([[1,2],
         [1,2],
         [1,2]]) # 3*2
print(f@g) # g不是向量无法自动转置,报错
print(g@f) # f自动转置
print(dot(g,f))
[5 5 5]
[5 5 5]

8. numpy转pandas

data = pd.DataFrames(numpy_matrix)

9. numpy.concatenate()进行矩阵的拼接

data = numpy.concatenate((a, b), axis=1)

10. 初始化赋值

arr = np.zeros((2, 3))      #初始化一个2*3的元素全为0的数组
arr = np.ones((1, 2))       #初始化一个1*2的元素全为1的数组
arr = np.full((2, 2), 8)    #初始化一个2*2的元素全为8的数组
arr = np.eye(3)              #初始化一个3*3 的对角线元素为1,其余全为0的数组(单位矩阵)
arr = np.random.random((3, 2))  #初始化一个3*2的,填充任意数字的数组
arr = np.empty((2, 3, 4))     #初始化一个2*3*4的数组,不填充
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

国家一级假勤奋研究牲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值