Python NumPy创建数组方法

目录
  • 1. 蛮力构造法
  • 2. 特殊数值法
  • 3. 随机数值法
  • 4. 定长分割法
  • 5. 重复构造法
  • 6. 网格构造法
  • 7. 自定义数据类型

1. 蛮力构造法

np.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)
import numpy as np

# 如果不指定数据类型,就会根据object参数自动选择合适的数据类型
a = np.array([[1, 2, 3], [4, 5, 6]])
# 也可以在创建数组时,指定元素的数据类型
b = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.uint8)

2. 特殊数值法

这里的特殊数值指的是0、1、空值。特殊数值法适合构造全0、全1、空数组,或由0、1组成的类似单位矩阵(主对角线为1,其余为0)的数组。

np.zeros(shape, dtype=float, order='C')
np.ones(shape, dtype=float, order='C')
np.empty(shape, dtype=float, order='C')
np.eye(N, M=None, k=0, dtype=float, order='C')

固定参数shape表示生成的数组结构,默认参数dtype用于指定数据类型(默认浮点型)。order参数指定的是数组在内存中的存储顺序,'C'表示C语言使用的行为优先方式,'F'表示Fortran语言使用的列优先方式

import numpy as np

print(np.zeros(6))
print(np.zeros((2, 3)))
print(np.ones((2, 3), dtype=int))
print(np.empty((2, 3)))
print(np.eye(3, dtype=np.uint8))

如果需要一个3行4列,初始值都是255的无符号整型数组

  • 方案1:全1数组乘以255
  • 方案2:全0数组加255
  • 方案3:使用填充函数fill()
import numpy as np

a = np.empty((3, 4), dtype=np.uint8)
a.fill(255)
print(a)

3. 随机数值法

np.random.random(size=None)
np.random.randint(low, high=None, size=None)
np.random.normal(loc=0.0, scale=1.0, size=None)

random()函数用于生成[0,1)区间内的随机浮点型整数,randint()函数用于生成[low,high)区间内的随机整形数组。参数size是一个元组,用于指定生成数组的结构

import numpy as np

print(np.random.random(3))
print(np.random.random((2, 3)))
print(np.random.randint(5))
print(np.random.randint(1, 5, size=(2, 3)))

normal()函数用于生成以loc为均值、以scale为标准差的正态分布数组。

import numpy as np
# 导入绘图模块
import matplotlib.pyplot as plt

# 生成正态分布数据
tall = np.random.normal(170, 4, 1000)
# 从156厘米到190厘米,每2厘米一个分段
bins = np.arange(156, 190, 2)
# 绘制柱状图
plt.hist(tall, bins)
# 显示图形
plt.show()

4. 定长分割法

import numpy as np

np.arange(start, stop, step, dtype=None)
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

arange()函数和Python的range()函数用法相同,并且还可以接收浮点型参数

import numpy as np

print(np.arange(5))
print(np.arange(5, 11))
print(np.arange(5, 11, 2))
print(np.arange(5.5, 11, 1.5))
print(np.arange(3, 15).reshape(3, 4))

linspace()函数需要3个参数:一个起点、一个终点、一个返回元素的个数。linspace()函数返回的元素包括起点和终点,可以通过endpoint参数选择是否包含终点

import numpy as np

# 返回0到5之间的5个等距数值,包括0和5
print(np.linspace(0, 5, 5))
# 返回5个等距数值,包括0但不包括5
print(np.linspace(0, 5, 5, endpoint=False))

5. 重复构造法

repeat()函数用来重复数组元素。但如果被重复的数组是一个多维数组,且repeat()函数指定了axis参数,情况就会变得有些复杂

import numpy as np

a = np.arange(5)
print(a)
# 重复一维数组元素3次
print(np.repeat(a, 3))
a = np.arange(6).reshape((2, 3))
print(a)
# 重复二维数组元素3次,不指定轴
print(np.repeat(a, 3))
# 重复二维数组元素3次,指定0轴
print(np.repeat(a, 3, axis=0))
# 重复二维数组元素3次,指定1轴
print(np.repeat(a, 3, axis=1))

tile()将整个数组而非数组元素水平和垂直重复指定的次数

import numpy as np

a = np.arange(5)
print(a)
# 重复一维数组3次
print(np.tile(a, 3))
# 重复一维数组3行2列
print(np.tile(a, (3, 2)))
a = np.arange(6).reshape((2, 3))
print(a)
# 重复二维数组3次
print(np.tile(a, 3))
# 重复二维数组2行3列
print(np.tile(a, (2, 3)))

6. 网格构造法

用数组表示经纬度网格方式一:用两个一维数组表示。使用定长分隔函数linspace(),将经度从-180°180°分为间隔为10°的37个点,将纬度从90°-90分为间隔为10°的19个点,得到两个一维数组

import numpy as np

# 精度为10°,共计37个经度点
lon = np.linspace(-180, 180, 37)
# 精度为10°,共计19个纬度点
lat = np.linspace(90, -90, 19)

用数组表示经纬度网格方式二:用两个二维数组分别表示经度网格和纬度网格。经度网格中每一列的元素都是相同的(同一个经度),纬度网格中每一行的元素都是相同的(同一个纬度)。生成二维经纬度网格的常用函数是np.meshgrid(),该函数以一维经度数组lon和一维纬度数组lat为参数,返回二维的经度数组和纬度数组

import numpy as np

# 精度为10°,共计37个经度点
lon = np.linspace(-180, 180, 37)
# 精度为10°,共计19个纬度点
lat = np.linspace(90, -90, 19)

lons, lats = np.meshgrid(lon, lat)
print(lons.shape)
print(lats.shape)
print(lons[:,0])
print(lons[0])

构造经纬度网格,除了使用np.meshgrid()函数外,还有一个更强大的方法,这个方法可以直接生成纬度网格和经度网格而无需借助于一维数组(请注意,纬度在前,经度在后)

import numpy as np

# 使用实数指定网格经度为5°
lats, lons = np.mgrid[90:-91:-5, -180:181:5]
print(lons.shape, lats.shape)
# 也可以用虚数指定分隔点数
lats, lons = np.mgrid[90:-90:37j, -180:180:73j]
print(lons.shape, lats.shape)

7. 自定义数据类型

结果显示:数组会将所有元素的数据类型都转为'<U32'类型。这里的U标识Unicode字符串;<表示字节顺序,意为小端在前(低位字节存储在最小地址中);32表示数组元素占用32字节,数组元素占用的字节数由所有元素中最长的那个元素决定

import numpy as np

print(np.array(['Anne', 1.70, 55]).dtype)

怎样在数组中保留用以生成数组的列表中的元素类型呢?这就需要用到自定义数据类型了。自定义数据类型类似于C语言的结构体,

其代码如下:

import numpy as np

mytype = np.dtype([('name', 'S32'), ('tall', np.float), ('bw', np.int)])
print(np.array([('Anne', 1.70, 55)], dtype=mytype))
(0)

相关推荐

  • Python使用numpy模块创建数组操作示例

    本文实例讲述了Python使用numpy模块创建数组操作.分享给大家供大家参考,具体如下: 创建数组 创建ndarray 创建数组最简单的方法就是使用array函数.它接收一切序列型的对象(包括其他数组),然后产生一个新的含有传入数据的Numpy数组. array函数创建数组 import numpy as np ndarray1 = np.array([1, 2, 3, 4]) ndarray2 = np.array(list('abcdefg')) ndarray3 = np.array([

  • Python 用NumPy创建二维数组的案例

    前言 上位机实战开发先放一放,今天来学习一个新的内容-NumPy的使用 1 一维数组 例:用普通方法生成一维数组 num = [0 for i in range(1,5)] # 创建一维数组 print(num) # 打印数组 print("-"*50) # 分割线 num[2]=6 # 将第三个元素修改位6 print(num) # 打印数组 print("-"*50) # 分割线 运行结果 例:用numpy生成一维数组 from numpy import * m

  • Python NumPy教程之数组的创建详解

    目录 使用 List 创建数组 使用数组函数创建数组 使用 numpy 方法创建数组 重塑数组 展平数组 在 Numpy 中创建数组的方法 使用 List 创建数组 数组用于在一个变量中存储多个值.Python 没有对数组的内置支持,但可以使用 Python 列表代替. 例子 : arr = [1, 2, 3, 4, 5] arr1 = ["geeks", "for", "geeks"] # 用于创建数组的 Python 程序 # 使用列表创建数

  • 浅谈Python numpy创建空数组的问题

    一.问题描述: 有一个shape为(308, 2)的二维数组,以及单独的一个数字,需要保存到csv文件中,这个单独的数字让其保存到第3列第一行的位置. 二.具体的实现: 首先要想把一个(308, 2)的二维数组和一个数字给拼接起来,直接拼接没办法实现,因为行数和列数都不同的两个ndarry是无法拼接的(此处按照目前我学的理解,是无法直接拼接的,如果可以的话,麻烦评论一下). 然后我首先想到的解决方法就是先建一个(308,1)的二维数组,然后令这个二维数组的第一个元素设置成那个数字,然后进行拼接,

  • Python数据分析numpy数组的3种创建方式

    目录 一.使用列表创建numpy数组 1 使用numpy创建一维数组 2 使用numpy创建二维数组 3 使用numpy创建一维数组,源为不同数据类型的列表 二.通过读取图片创建多维numpy数组 1 将图片信息读取到numpy数组中 2 在jupyter中读取图片数据后并显示 3 对图片数组数据处理 三.通过指定函数生成numpy数组 1 生成多维数组 2 生成一维线性数组 3 生成一维等差数列 4 生成随机的多维数组 一.使用列表创建numpy数组 1 使用numpy创建一维数组 2 使用n

  • Python NumPy创建数组方法

    目录 1. 蛮力构造法 2. 特殊数值法 3. 随机数值法 4. 定长分割法 5. 重复构造法 6. 网格构造法 7. 自定义数据类型 1. 蛮力构造法 np.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0) import numpy as np # 如果不指定数据类型,就会根据object参数自动选择合适的数据类型 a = np.array([[1, 2, 3], [4, 5, 6]]) # 也可以在创

  • 基于Python Numpy的数组array和矩阵matrix详解

    NumPy的主要对象是同种元素的多维数组.这是一个所有的元素都是一种类型.通过一个正整数元组索引的元素表格(通常是元素是数字). 在NumPy中维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank,但是和线性代数中的秩不是一样的,在用python求线代中的秩中,我们用numpy包中的linalg.matrix_rank方法计算矩阵的秩,例子如下). 结果是: 线性代数中秩的定义:设在矩阵A中有一个不等于0的r阶子式D,且所有r+1阶子式(如果存在的话)全等于0,那末D称为矩阵

  • Python numpy实现数组合并实例(vstack,hstack)

    若干个数组可以沿不同的轴合合并到一起,vstack,hstack的简单用法, >>> a = np.floor(10*np.random.random((2,2))) >>> a array([[ 8., 8.], [ 0., 0.]]) >>> b = np.floor(10*np.random.random((2,2))) >>> b array([[ 1., 8.], [ 0., 4.]]) >>> np.vs

  • Python numpy 点数组去重的实例

    废话不多说,直接上代码,有详细注释 # coding = utf-8 import numpy as np from IPython import embed # xy 输入,可支持浮点数操作 速度很快哦 # return xy 去重后结果 def duplicate_removal(xy): if xy.shape[0] < 2: return xy _tmp = (xy*4000).astype('i4') # 转换成 i4 处理 _tmp = _tmp[:,0] + _tmp[:,1]*1

  • python numpy 一维数组转变为多维数组的实例

    如下所示: import numpy new_list = [i for i in range(9)] numpy.array(new_list).reshape(3,3) 借助numpy库: 以上这篇python numpy 一维数组转变为多维数组的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • Python Numpy中数组的集合操作详解

    我们知道两个 set 对象之间,可以取交集.并集.差集.对称差集,举个例子: s1 = {1, 2, 3} s2 = {2, 3, 4} """ &: 交集 |: 并集  -: 差集 ^: 对称差集 """ # 以下几种方式是等价的 # 但是一般我们都会使用操作符来进行处理,因为比较方便 print(s1 & s1) print(s1.intersection(s2)) print(set.intersection(s1, s2)

  • python numpy.power()数组元素求n次方案例

    如下所示: numpy.power(x1, x2) 数组的元素分别求n次方.x2可以是数字,也可以是数组,但是x1和x2的列数要相同. >>> x1 = range(6) >>> x1 [0, 1, 2, 3, 4, 5] >>> np.power(x1, 3) array([ 0, 1, 8, 27, 64, 125]) >>> x2 = [1.0, 2.0, 3.0, 3.0, 2.0, 1.0] >>> np.

  • Ruby创建数组方法总结

    程序经常需要管理变量集合.例如,管理日历的程序必须有一周的天数列表.每天必须存储在一个变量中,它们的列表可以存储在一个数组变量中.通过这个数组变量,您可以访问每一天. 创建空数组 您可以通过创建一个新的数组对象并将其存储在一个变量中来创建一个空数组.这个数组将为空;您必须用其他变量填充它才能使用它.如果要从键盘或文件中读取内容列表,这是创建变量的一种常见方法. 在下面的示例程序中,使用array命令和赋值运算符创建一个空数组.从键盘上读取三个字符串(字符的有序序列)并"pushed"或

  • Numpy中创建数组的9种方式小结

    目录 1.使用empty方法创建数组 2.使用array创建数组 3.使用zeros/ones创建数组 4.使用arange创建数组 5.使用linspace创建数组 6.使用numpy.random.rand创建数组 7.使用numpy.random.randn创建数组 8.使用numpy.random.randint创建数组 9.使用fromfunction创建数组 1.使用empty方法创建数组 该方式可以创建一个空数组,dtype可以指定随机数的类型,否则随机采用一种类型生成随机数. i

随机推荐