numpy使用tips

news/2025/2/11 18:56:51/

numpy使用tips

  • 1. numpy中二维数组不支持求逆运算
  • 2. 创建np.matrix
  • 3. 列表转array
  • 4. numpy.nditer迭代数组
  • 5. numpy.outer 外积
  • 6. numpy.zeros_like() 创建全零的矩阵
  • 7. numpy矩阵相乘运算符@
  • 8. numpy转pandas
  • 9. numpy.concatenate()进行矩阵的拼接
  • 10. 初始化赋值

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的数组,不填充

http://www.ppmy.cn/news/57379.html

相关文章

网络基础:socket套接字

文章目录 1. 前导知识1.1 源MAC地址和目的MAC地址1.2 源IP地址和目的IP地址1.3 MAC地址和IP地址的配合1.4 源端口号和目的端口号1.5 Socket1.6 UCP协议和TCP协议1.7 网络字节序高低位高低地址大端和小端网络字节序常用转换函数 2. socket 网络编程2.1 socket 常见接口创建套接字…

什么是中台系统以及挑战和解决方案?

本文由 drawon.cn(桌案)创始人编辑整理。 18年前后, 中台的概念开始被广泛讨论。 但与此同时,关于中台究竟是什么,却是众说纷纭。 在有些人眼里:中台就是技术平台,像微服务开发框架、Devops平…

前端存储二:indexedDB

indexedDB 特点:以域名纬度,浏览器大量结构化数据存储方案,运行在浏览器的非关系型数据库。 大小:不会小于 250MB,支持二进制存储。 接口:异步接口,支持事物机制 这里使用网页脚本生成&#x…

重载new和delete

起源 如果我们的程序需要频繁的new和delete,就会导致内存碎片、性能损失等问题,所以需重载new 和delete,如果我们不用new和delete,直接把数据放在栈里面,是不是就能避免这个问题呢,但栈的空间是有限的&…

788. 逆序对的数量(C++和Python3)——2023.5.2打卡

文章目录 QuestionIdeasCode Question 给定一个长度为 n 的整数数列&#xff0c;请你计算数列中的逆序对的数量。 逆序对的定义如下&#xff1a;对于数列的第 i 个和第 j 个元素&#xff0c;如果满足 i<j 且 a[i]>a[j] &#xff0c;则其为一个逆序对&#xff1b;否则不…

【MYSQL】数据类型和约束

目录 数据类型 1.数值类型 1.1.位--类型bit(M) 1.2. 整数类型--tinyint&#xff0c;smallint&#xff0c;int&#xff0c;bigint 1.3.小数类型--float、decimal 2.字符类型--char、varchar 3.日期类型--datetime、timestamp 4.string类型--enum和set mysql的约束 1.空…

第一章 Java基础 50 道面试题

文章目录 前言匿名内部类访问的局部变量为什么必须要用final修饰? Java基础1、jdk和jre有什么区别&#xff1f;2、final在Java中有什么作用&#xff1f;3、有常量类了为什么还要使用枚举类&#xff1f;4、为什么使用包装类&#xff1f;5、和equals的区别是什么&#xff1f;6、…

Transformers 发展一览

动动发财的小手&#xff0c;点个赞吧&#xff01; Transformers 研究概览 1. 介绍 近年来&#xff0c;深度学习的研究步伐显着加快&#xff0c;因此越来越难以跟上所有最新发展。尽管如此&#xff0c;有一个特定的研究方向因其在自然语言处理、计算机视觉和音频处理等多个领域取…