Numpy 数组及矩阵创建详解

基本数组创建方式

numpy中的主要数据类型为ndarray类型,也可以称之为数组,其在内存中是连续存储的.numpy底层大多C语言进行编写,所以运行效率较高,并且numpy库支持并行计算,如矩阵乘法以及其他线性代数操作

np.array()

np.array()是numpy中最为基础和常用的创建数组的方式,其可以接受列表或者元组作为参数传入进行数组创建

import numpy as npdata1 = np.array([1,2,3])
print(data1)
print(type(data1))
# [1 2 3]
# <class 'numpy.ndarray'>

 需要注意,在进行数组创建的时候,可以指定创建数组的元素数据类型,只需要指定参数dtype就可以,常用的有np.float32,np.float64,np.int32,np.int64,在numpy中,整形和浮点型默认为int32和float64

import numpy as npdata1 = np.array([1,2,3],dtype=np.float32)
print(data1)
# [1. 2. 3.]

在创建完数组后,若想要更改数组的元素数据类型,可以使用astype()进行更改数据类型,参数为要更改的数据类型,注意在进行类型更改需要重新赋值,这里不会默认覆盖

import numpy as npdata1 = np.array([1,2,3],dtype=np.float32)
print(data1)
data1 = data1.astype(np.int64)
print(data1)
# [1. 2. 3.]
# [1 2 3]

 

基本二维矩阵创建方式

np.array()

np.array()可以用于一维数组和高维矩阵的创建,所以是相当通用的一种方法,需要注意,在numpy中创建高维矩阵,也就是高维数组,要求所有维度的大小必须相等.

import numpy as npdata1 = np.array([[1,2,3],[4,5,6]],dtype=np.float32)
print(data1)
# [[1. 2. 3.]
#  [4. 5. 6.]]
np.mat()/np.matrix()

这里把np.mat()和np.matrix()放在一起,是因为这两个函数都是用于创建二维矩阵,切在功能性上二者并无区别,使用哪个函数看个人习惯

import numpy as npdata1 = np.mat([[1,2,3],[4,5,6]],dtype=np.float32)
print(data1)
print(type(data1))
# [[1. 2. 3.]
#  [4. 5. 6.]]
# <class 'numpy.matrix'>

mat()和matrix()还支持参数类型为字符串,格式为"a b;c d" ,这样会创建[[a,b],[c,d]]的矩阵

import numpy as npdata1 = np.mat('1 2 3;4 5 6')
print(data1)
# [[1 2 3]
#  [4 5 6]]

可以看到使用mat()和matrix()函数创建出来的变量类型为numpy.matrix而不是ndarray,需要注意,这两个函数只能创建二维矩阵,不能创建更高维的矩阵,与ndarray的较为明显的区别在于矩阵乘法运算,numpy中常用的运算函数会在下一篇博客更新,但是这里更推荐使用ndarray类型的数组或矩阵,matrix通用性较差

随机数组创建方式

numpy中的随机数组生成函数都集中在np.random模块中

np.random.rand()

np.random.rand()用于创建具有处于[0,1)中的均匀分布的值的数组,参数为想要创建的数组的shape

import numpy as npdata1 = np.random.rand(2,3,3)
print(data1)
# [[[0.94574906 0.38356061 0.57587797]
#   [0.25380591 0.62958842 0.58219202]
#   [0.32493826 0.90480052 0.6395252 ]]
# 
#  [[0.98839104 0.79301215 0.74439871]
#   [0.12027667 0.31407121 0.21150651]
#   [0.08862386 0.8341699  0.34966745]]]
np.random.randn()

np.random.randn()函数用于创建均值为0房差为1的符合高斯分布的数组,参数也是想要创建数组的shape,需要注意,均值为0房差为1只是近似,有时会出现偏差,生成的值基本都集中在0附近

import numpy as npdata1 = np.random.randn(2,3,3)
print(data1)
# [[[-0.70440759 -0.10907671  0.22013064]
#   [ 0.10868323  0.79157001  0.55431646]
#   [ 1.07249444 -1.75549428 -1.37090188]]
# 
#  [[-1.29439354 -0.68123971  1.00515311]
#   [ 0.52781018 -1.13052502 -1.2176601 ]
#   [-1.11574164  0.48404165 -0.49111685]]]

np.random.uniform()

np.random.uniform()函数用于创建具有均匀分布属性的数组,参数有low,high,size,dtype,生成的值处于[low,high)区间,size为生成的数组的形状

import numpy as npdata1 = np.random.uniform(low = 0,high = 10,size = (2,3))
print(data1)
# [[6.91073289 8.78237297 7.04289457]
#  [8.19083172 5.46516624 4.85915078]]
np.random.normal()

np.random.normal()函数用于创建具有正太分布属性的数组,参数有loc,scale,size,dtype,其中loc代表均值,scale代表标准差,size为形状,loc默认为0,scale默认为1

import numpy as np
from numpy import dtypedata1 = np.random.normal(size = (2,3))
data2 = np.random.normal(loc = 1, scale = 3, size = (2,3))
print(data1)
print(data2)
# [[-1.81691015 -0.41976602  0.01175184]
#  [-0.57078899  0.36689629  0.51743499]]
# [[-0.74949562 -1.87051077 -0.5765881 ]
#  [-5.05718016 -0.29484111  2.59209103]]

其他常用的数组创建方式

np.arange()

np.arange()用于创建序列数组,可以设置参数包括start,stop,step分别是起始位置,终止位置和步长,这里类似于python中的range()函数,其中start默认为0,stop是必须设置的参数,step默认为1,np.arange(n)默认会创建包括[0,n)的数组,包含头,不包含尾,并且arange()函数也可以设置dtype

import numpy as npdata1 = np.arange(start=1,stop=10,step=2,dtype=np.float32)
data2 = np.arange(10)
print(data1)
print(data2)
# [1. 3. 5. 7. 9.]
# [0 1 2 3 4 5 6 7 8 9]
np.linspace()

np.linspace()函数是用于创建等差数组的函数,参数包括start,stop,num,dtype,以及endpoint分别为起始位置,终止位置,以及要生成的等差数组的元素数量,最后dtype为元素类型,endpoint为是否包含stop

import numpy as npdata1 = np.linspace(start=1,stop=10,num=10,dtype=np.float32,endpoint=True)
print(data1)
# [ 1.  2.  3.  4.  5.  6.  7.  8.  9. 10.]
np.logspace()

np.linspace()函数是用于创建等比数组的函数,参数包括start,stop,num,dtype,分别为起始位置,终止位置,以及要生成的等差数组的元素数量,最后dtype为元素类型,endpoint为是否包含stop,相比linspace多出了一个参数base,也就是底数,默认为10

import numpy as npdata1 = np.logspace(start=1,stop=10,num=10,dtype=np.float32,endpoint=True)
data2 = np.logspace(start=1,stop=10,num=10,dtype=np.float32,endpoint=True,base =2)
print(data1)
print(data2)
# [1.e+01 1.e+02 1.e+03 1.e+04 1.e+05 1.e+06 1.e+07 1.e+08 1.e+09 1.e+10]
# [   2.    4.    8.   16.   32.   64.  128.  256.  512. 1024.]
np.zeros()

np.zeros()用于创建全零数组,参数为shape(形状)和dtype

import numpy as npdata1 = np.zeros(shape = (2,3),dtype = np.int32)
print(data1)
# [[0 0 0]
#  [0 0 0]]
np.ones()

np.ones()用于创建全一数组,参数与np.zeros()相同

import numpy as npdata1 = np.ones(shape = (2,3),dtype = np.int32)
print(data1)
# [[1 1 1]
#  [1 1 1]]
np.empty()

np.empty()是用于创建空数组的函数,参数仍与np.zeros()相同,值取决于当前的内存状态

import numpy as npdata1 = np.empty(shape = (2,3),dtype = np.int32)
print(data1)
# [[         0          0          0]
#  [1071644672          0 1072693248]]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/52930.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HUD杂散光环境模拟测试设备

概述 HUD&#xff08;Head-Up Display&#xff09;杂散光环境模拟测试设备是用于模拟飞行器在实际运行过程中可能遇到的多种光照环境的系统。它主要用于测试和验证HUD显示系统的性能&#xff0c;确保其能在各种光线条件下清晰、准确地显示信息&#xff0c;从而保障飞行员在复杂…

redis面试(二十六)总结

到这里 redis的相关知识就要告一段落了&#xff0c;给前面的系列文章做一下大致的总结。 前四篇是redis底层数据结构实现逻辑剖析&#xff0c;四、五两篇说的是持久化和淘汰策略&#xff0c;后面大量篇幅讲的都是redis锁相关。 其他相关的一些面试问题&#xff0c;之前也发过…

深入了解Cassandra数据库:原理、架构与最佳实践

一、Cassandra的基本原理与架构 1.1 分布式架构 Cassandra的架构是无中心化的&#xff0c;这意味着每个节点在集群中都是平等的&#xff0c;没有单一的主节点。这种设计确保了系统的高可用性&#xff0c;即使在部分节点失效的情况下&#xff0c;集群依然可以正常运行。Cassan…

MySQL——多表操作(四)(2)带 EXISTS 关键字的子查询

EXISTS 关键字后面的参数可以是任意一个子查询&#xff0c;这个子查询的作用相当于测试&#xff0c;坏产生任何数据&#xff0c;只返回 TRUE 或 FALSE&#xff0c;当返回值为 TRUE 时&#xff0c;外层查询才会执行。 例如&#xff0c;查询 employee 表中是否存在年龄大于 21岁的…

集成电路学习:什么是BLE低功耗蓝牙

一、BLE&#xff1a;低功耗蓝牙 BLE&#xff0c;即低功耗蓝牙&#xff08;Bluetooth Low Energy&#xff09;&#xff0c;也被称为蓝牙4.0&#xff0c;是蓝牙技术的一种变体。BLE的主要特点在于其低功耗特性&#xff0c;旨在通过一系列的技术和优化措施&#xff0c;使得设备能够…

【大模型理论篇】通用大模型架构分类及技术统一化

1. 背景 国内的 “百模大战” 以及开源大模型的各类评测榜单令人眼花缭乱&#xff0c;极易让人陷入迷茫。面对如此众多的大模型&#xff0c;我们该如何审视和选择呢&#xff1f;本文将从大模型架构的角度&#xff0c;对常见的开源大模型架构进行汇总与分析。资料来源于公开…

MySQL——多表操作(三)连接查询(1)交叉连接

在关系型数据库管理系统中&#xff0c;建立表时各个数据之间的关系不必确定&#xff0c;通常将每实体的所有信息存放在一个表中&#xff0c;当查询数据时&#xff0c;通过连接操作查询多个表中的实体信息&#xff0c;当两个或多个表中存在相同意义的字段时&#xff0c;便可以通…

2024全国大学生数学建模国赛,成员如何分工协作?

文末获取2024国赛数学建模思路代码&#xff0c;9.5开赛后第一时间更新 大家知道&#xff0c;数学建模竞赛是需要一个团队的三个人在三天或四天的时间内&#xff0c;完成模型建立&#xff0c;编程实现和论文写作的任务&#xff0c;对许多第一次参加建模或者建模经验比较欠缺的团…

Vue3.0教程001:Vue3简介

0、前言 编码规范&#xff1a; 在Vue3中 编码语言&#xff1a;JavaScript、TypeScript**&#xff08;推荐&#xff09;**代码风格&#xff1a;组合式API**&#xff08;推荐&#xff09;**、选项式API简写形式&#xff1a;setup语法糖 主要内容&#xff1a; 核心&#xff1a;ref…

线性代数基础

向量的点积 点乘和叉乘 矩阵乘法 规则&#xff1a; 1&#xff0c;两个矩阵相乘时&#xff0c;第一个矩阵的列数必须等于第二个矩阵的行数 矩阵乘法是点乘还是叉乘 矩阵点乘&#xff1a;是矩阵各个对应元素相乘, 这个时候要求两个矩阵必须同样大小。矩阵叉乘&#xff1a;矩…

Android 使用原生相机Camera在预览界面进行识别二维码或者图片处理

1 项目需求 最近项目中有个需求:使用原生相机在预览界面进行识别二维码和图片处理。其实这个需求不是很难,难在对预览画面的处理过程。 自己针对这个需求写了一个工具类,便于后续进行复盘,同时也分享给有类似需求的伙伴们。 2 遇到的问题 2.1 二维码识别成功率低 使用…

K13021 - 小科坐地铁

题目描述 小科每天上学都是坐地铁的&#xff0c;所以他妈妈给他办了一张地铁卡&#xff0c;每次乘坐地铁出入闸机时刷卡就行。最近一段时间&#xff0c;小科想知道从家到学校要多长时间&#xff0c;所以从地铁公司调出了n次乘车的记录信息进行核算&#xff0c;手动核算太麻烦&…

掌握Go语言中的Channel:并发编程的核心

在Go语言的并发世界里&#xff0c;Channel 是一种至关重要的构建块&#xff0c;它允许不同goroutines之间的数据交换和同步。Channel的独特之处在于它能够以类型安全的方式&#xff0c;优雅地处理数据流和控制流&#xff0c;从而简化了并发编程的复杂性。 什么是Channel 在Go…

Codeforces Round 968 (Div. 2)(A,B,C,D1,D2)

比赛链接 这场还是有点东西的&#xff0c;这几个题都不难&#xff0c;但是要做对还是比较麻烦的。B是一个简单的博弈&#xff0c;C是鸽巢原理&#xff0c;D1是推一个结论&#xff0c;D2是一个dp&#xff0c;初始化比较烦人。 A. Turtle and Good Strings 题面&#xff1a; 乌…

由浅入深学习 C 语言:Hello World【提高篇】

目录 引言 1. Hello World 程序代码 2. C 语言角度分析 Hello World 程序 2.1. 程序功能分析 2.2 指针 2.3 常量指针 2.4 指针常量 3. 反汇编角度分析 Hello World 程序 3.1 栈 3.2 函数用栈传递参数 3.3 函数调用栈 3.4 函数栈帧 3.5 相关寄存器 3.6 相关汇编指令…

一些好用的网站和api合集

title: 集合一些好用的网站和api tags: 笔记收集 文章目录 内容先写这么多吧 以后有再加上去有好用的评论区也可以分享一下网站集合软件集合接口集合ONE金山词霸扇贝单词一言今日诗词Storm 往期内容基础库HAL cubemax VSCODE GCC 内容 这是一个关于一些网站的分享方便自己好…

速盾:深度解析云CDN及应用

云CDN&#xff08;Content Delivery Network&#xff09;是一种利用分布式节点服务器提供内容分发服务的技术。它能够将静态和动态的内容分发到离用户最近的服务器节点&#xff0c;从而提高用户访问速度和体验。云CDN在现代互联网应用中扮演着重要的角色&#xff0c;本文将深入…

优化学习管理:Moodle和ONLYOFFICE文档编辑器的完美结合

目录 前言 一、什么是 Moodle 1、简单快速插入表单字段 3、免费表单模板库 4、开启无缝协作 三、在Moodle中集成ONLYOFFICE文档 四、在Moodle安装使用ONLYOFFICE 1、下载安装 2、配置服务器 3、在Moodle中使用ONLYOFFICE 文档活动 五、未来展望 写在最后 前言 在当今教育科技飞…

C++(this指针/常函数与常对象/拷贝构造函数/赋值函数/静态成员/静态成员函数/单列模式)

一、this指针与常函数 成员函数是如何区别调用它的对象&#xff1f; #include <iostream> using namespace std; ​ class Test {const int num; public:Test(int num):num(num) {}void show(void){cout << num << " " << &num <&l…