![13825820-2e4445f921769f56.jpg](https://i-blog.csdnimg.cn/blog_migrate/762898f4a00e15c5e980985f555513a0.jpeg)
一、数据与numpy数组的创建
1、 python数组的创建
python中的固定类型数组:
python中提供了几种将数组存储在有效的、固定类型的数据缓存中的选项。内置的数组(array)模块可以创建按统一类型的密集数组:
![13825820-7d65f9fafb7bd055.jpg](https://i-blog.csdnimg.cn/blog_migrate/284174e3e49ad905d6c95321bbceacf4.jpeg)
这里的“i”表示的是一个数据类型码,表示数据为整型。
更实用的是ndarray数组对象,Python的数组对象提供了数组类型的有效存储,而Numpy为该数据加上了高效的操作。稍后将会介绍这些操作,这里先集中展示创建Numpy数组的方法:
2、 Numpy数组的创建
从python列表创建数组:
![13825820-d5186f3f8ea19271.jpg](https://i-blog.csdnimg.cn/blog_migrate/aba292b6aae4c166c551000983b6a8c6.jpeg)
- 创建整数型
![13825820-24c07abdbbbc5fe6.jpg](https://i-blog.csdnimg.cn/blog_migrate/6ab15235f2ec99c364391aab3fea8aa0.jpeg)
- 指定类型创建数组
![13825820-ad0af42c180b10a0.jpg](https://i-blog.csdnimg.cn/blog_migrate/a2aae0aba279caa8c4e598625441f51f.jpeg)
- 根据内容,自动创建对应数据类型
![13825820-07ae374a5e87a69c.jpg](https://i-blog.csdnimg.cn/blog_migrate/8cc18d89ed70b52fa69cb2e4e9fbbde5.jpeg)
创建np数组时需要强调元素类型的一致。如果类型不同则会自动向上转换。
2.1dtype参数进行强制类型转换或类型指定
![13825820-3725bbe3b9c55eae.jpg](https://i-blog.csdnimg.cn/blog_migrate/9d3b00c68cb7bce5dfb13e79a779ec63.jpeg)
2.2生成嵌套数组
手动创建嵌套数组
![13825820-df39af7819677c98.jpg](https://i-blog.csdnimg.cn/blog_migrate/c344b8c3f7bd771c553477bbf6457273.jpeg)
使用公式嵌套数组
![13825820-50534bc300a59e44.jpg](https://i-blog.csdnimg.cn/blog_migrate/936aea4ad592aff3184f06564451e371.jpeg)
3、11中创建ndarray数组的高效创建方法
面对大型数组,用Numpy数组时,用Numpy内置方法从头创建数组时一种高效的方法,以下是几个示例:
3.1 创建一个元素都为0 的n * m 的多(2)维数组
np.zeros((维度,行数,列数),dtype = "指定类型(float32/int32/str)")
- 创建一个10列元素类型为浮点型的数组,在仅指定一个参数时,创建的表示一行,指定列数,默认为浮点型。
![13825820-66898331f443264c.jpg](https://i-blog.csdnimg.cn/blog_migrate/af4db55d602a95217f018682588b8295.jpeg)
- 创建一个3行4列元素类型为整数型的数组, 仅指定两个参数时,表示的是行数和列数。
![13825820-9fd3ea3a1d30eb26.jpg](https://i-blog.csdnimg.cn/blog_migrate/3b00cc0cf7bb954ab5f66ecf50d29517.jpeg)
- 创建一个2维3行4列元素类型为整数型的数组, 指定三个参数时,表示的是维度,行数和列数。
![13825820-3510cee705fc8554.jpg](https://i-blog.csdnimg.cn/blog_migrate/1863a6c182817aee7abbb5a34d698c96.jpeg)
3.2 创建一个元素都为1的n*m的多(3)维数组
np.ones((维度,行数,列数),dtype = "指定类型(float32/int32/str)")
![13825820-20f13be24dcaec64.jpg](https://i-blog.csdnimg.cn/blog_migrate/9f61e59699e030bc5ef29e0d4ae6349d.jpeg)
- 传维度参数的时候,放在一个容器中,可以是元组,也可以是列表
![13825820-95b9b34171a8ca26.jpg](https://i-blog.csdnimg.cn/blog_migrate/9f7809ec87cd828433e8cacbdc453360.jpeg)
3.3创建一个的整数型数组,数组的值是一个线性序列。
np.arange(start[真包含], end[假包含], step)
- 创建一个从0开始30结束,步长为3的数组
![13825820-052078de419588e4.jpg](https://i-blog.csdnimg.cn/blog_migrate/eed61d4f59ea55f32251b9623d156b6b.jpeg)
- 创建一个从1开始30结束的数组
![13825820-044af3c71438d035.jpg](https://i-blog.csdnimg.cn/blog_migrate/75077c813cb00d3625bc4cc73587c4f8.jpeg)
- 创建一个长度到10结束的数组
![13825820-81687050227cd78a.jpg](https://i-blog.csdnimg.cn/blog_migrate/e0b5579473ad487a08d2d9bebef3a17f.jpeg)
3.4创建一个50个元素的数组,这50个数均匀地分配到1~10
np.linspace(start, stop, 平均分成的分数)
![13825820-7fed3a86f926439d.jpg](https://i-blog.csdnimg.cn/blog_migrate/4529958b8e456f9d3695bf990dabf8bb.jpeg)
3.5 创建一个在0-1之间随机分布的由随机数组成的数组
np.random.random((维度,行数, 列数))
- 创建一个3列的随机数数组
![13825820-a71af80cbe9b50cd.jpg](https://i-blog.csdnimg.cn/blog_migrate/755f2110a6fa0daa99b8a91c2846a377.jpeg)
- 创建一个3行3列的随机数数组
![13825820-f54e965f2dcf975e.jpg](https://i-blog.csdnimg.cn/blog_migrate/0850c3016f123062f2c6ad52adec3050.jpeg)
- 创建一个3维3行3列的数组
![13825820-1185ffac5082d964.jpg](https://i-blog.csdnimg.cn/blog_migrate/12aff550606729ecc7dbf947d95ca7e0.jpeg)
其他生成随机数的方法
- 创建一个服从标准正态分布的数组
np.random.randn(维度,行数,列数)
- 创建均匀分布[0,1)上的数组
np.random.rand(维度,行数,列数)
3.6 创建一个正态分布的随机数数组
np.random.normal(均值, 方差, (维度,行数, 列数))
- 创建一个均值为0,方差为1,3维3行3列的随机数数组
![13825820-2e97a8597d5ec24a.jpg](https://i-blog.csdnimg.cn/blog_migrate/d0f3c8615a3ff2be911160293a041a80.jpeg)
3.7创建一个服从设置区间的随机数整数型的数组
np.random.randint(start, stop, (维度,行数, 列数))
- 创建从0开始10结束,3维3行3列的整数型数组
![13825820-b00e28cb33c8d6fe.jpg](https://i-blog.csdnimg.cn/blog_migrate/61318feac44deb7a8f566778d84ae2a2.jpeg)
3.8 创建一个对角线元素都为1,其他位置元素都为0的单位矩阵
np.eye(行数,列数,dype=’元素类型(默认为浮点型)’)
- 创建一个4列的单位矩阵,如果仅指定一个参数,默认为列数,行数会默认为是列数。
![13825820-1e4f1505814da1af.jpg](https://i-blog.csdnimg.cn/blog_migrate/086cdacb7b27ec9e86e41ca581dcf972.jpeg)
- 创建一个4行3列的单位矩阵
![13825820-b93d508dbf79f8a3.jpg](https://i-blog.csdnimg.cn/blog_migrate/e1e294e9ef70e552674ff8906206fd7d.jpeg)
3.9创建一个由m*n维未初始化的数组,数组的值是内存空间中的任意值
np.empty(n)
![13825820-ad1000e85341157b.jpg](https://i-blog.csdnimg.cn/blog_migrate/c4352098fa3bbd245b2aecc833e00755.jpeg)
3.10 创建一个指定元素的对角矩阵
Np.diag(n)
- 创建对角元素为1,2,3,4的对角矩阵
![13825820-f0181e18f1cc22ca.jpg](https://i-blog.csdnimg.cn/blog_migrate/b42d885c83a7b220adc26c2adb682fad.jpeg)
3.11创建一个指定行列,和指定内容的数组
Np.full((维度,行数,列数),指定值(可以是一个数组,也可以是一个列表或嵌套列表))
- 创建一个3维3行5列,值全部为3.14的数组
![13825820-de5e2ed6ba7d5b04.jpg](https://i-blog.csdnimg.cn/blog_migrate/eaf197393ac1eeaaf813e099b50597f9.jpeg)
二、数组的基本操作
1、查看Nddaray属性
数组的属性:
- 数组的维度:ndim
- 数组每个维度的大小:shape
- 数组的总大小(元素的总个数):size
- 数组类型:dtype
- 数组元素字节大小:itemsize;nbytes
现在我们定义三个数组, 一维数组, 二维数组, 三维数组,为了确保大家都能生成一样的数组, 我们先设置随机数种子。
Np.random.seed可以使生成随机数时可以生成一样的随机数
![13825820-78d5f4f18d1989d6.jpg](https://i-blog.csdnimg.cn/blog_migrate/97e6bea3c6bc79aa9d51f0e55e1995c7.jpeg)
1.1查看数组的形状
![13825820-5235ba1597a7ebe3.jpg](https://i-blog.csdnimg.cn/blog_migrate/0a14f97c0bf2175fd16ca0e0f2cfa0d3.jpeg)
1.2查看数组的维度
![13825820-b801b1cd77dcfa14.jpg](https://i-blog.csdnimg.cn/blog_migrate/8b9f4e1e3f7a2a9603aa94897b5cdd40.jpeg)
1.3 查看数组的总大小
![13825820-7bc14b6528d07c4c.jpg](https://i-blog.csdnimg.cn/blog_migrate/131881af12008727c46619658b66438d.jpeg)
1.4查看数组的数据类型
![13825820-126d45a64b9c0700.jpg](https://i-blog.csdnimg.cn/blog_migrate/a8091c3ca7360f5a954c4426c5c699cb.jpeg)
1.5查看数组中每个元素的大小(所占用内存的大小)
![13825820-7a3ddd4b5e9e24ae.jpg](https://i-blog.csdnimg.cn/blog_migrate/b9b0d219d6eada10983868d7fd27654c.jpeg)
1.6查看数组的总大小(占用内存的大小)
![13825820-1f2602923c024cc3.jpg](https://i-blog.csdnimg.cn/blog_migrate/ab523cc84245fde38ad7704d9dc06ac9.jpeg)
1.7对数组进行转置
![13825820-ce9969024b26fd33.jpg](https://i-blog.csdnimg.cn/blog_migrate/21556ee065c8cc99e5cd7ad151bed873.jpeg)
1.8其他查看属性的方法
Ndarray.flags
有关数组的内存布局的信息。
Ndarray.shape
数组维数组。
Ndarray.ndim
数组维数,在Python世界中,维度的数量被称为rank。
Ndarray.data
Python缓冲区对象指向数组的数据的开始。
Ndarray.size
数组中的元素总个数。
Ndarray.itemsize
一个数组元素的长度(以字节为单位)。
Ndarray.dtype
数组元素的数据类型。
Ndarray.T
数组的转置。
2.Numpy数据类型以及类型转换
Numpy中的数组比 Python 原生中的数组(只支持整数类型与浮点类型)强大的一点就是它支持更多的数据类型。
2.1 numpy基本数据类型
Numpy常见的基本数据类型如下:
数据类型
描述
bool_
布尔(True或False),存储为一个字节
int_
默认整数类型(与C long相同;通常为int64或int32)
intc
与C int(通常为int32或int64)相同
intp
用于索引的整数(与C ssize_t相同;通常为int32或int64)
int8
字节(-128到127)
int16
整数(-32768到32767)
int32
整数(-2147483648至2147483647)
int64
整数(-9223372036854775808至9223372036854775807)
uint8
无符号整数(0到255)
uint16
无符号整数(0到65535)
uint32
无符号整数(0至4294967295)
uint64
无符号整数(0至18446744073709551615)
float_
float64的简写。
float16
半精度浮点:符号位,5位指数,10位尾数
float32
单精度浮点:符号位,8位指数,23位尾数
float64
双精度浮点:符号位,11位指数,52位尾数
complex_
complex128的简写。
complex64
复数,由两个32位浮点(实数和虚数分量)
complex128
复数,由两个64位浮点(实数和虚数分量)
虽然有这么多的数据类型,但是我们平时用的时候仅需要知道(int,bool,float,complex,str)这几种就可以了,暂时不需要去记这么多。
这些类型都可以在创建ndarray的时候通过dtype来制定
![13825820-54353251209191c0.jpg](https://i-blog.csdnimg.cn/blog_migrate/ed84c37b6868ebac33581424f28790cf.jpeg)
2.2数据类型的转换
数组直接数据类型的转换首选是.astype()方法,或者使用类型本身作为函数。
![13825820-ebd4ddb575653010.jpg](https://i-blog.csdnimg.cn/blog_migrate/02e64bb74e2e2f4bf94a55deebf3c45d.jpeg)