numpy array create 创建数组 开始步入 numpy数组的世界

numpy array create: 学习numpy的创建数组是对这个python工具包学习必不可少的入门步骤,之前–a few years ago的文章(numpy 数组属性 区别于 python list 清仓大甩卖)中我们已经对numpy array的属性做了入门级的介绍,本篇我们又要对create numpy array做入门级的介绍了。

我们会用到的函数方法做入门级的介绍,同时会做一些基础级的注意事项说明。

1. 基础创建函数

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
名称描述
object数组或嵌套的数列
dtype数组元素的数据类型,可选
copy对象是否需要复制,可选
order创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
subok默认返回一个与基类类型一致的数组
ndmin指定生成数组的最小维度
array 参数说明
    # 1、基本创建方式
    a = np.array([3, 4, 5])
    print('a=', a)
    # 2、显式指定纬度
    b = np.array([3, 4, 5], ndmin=1)
    print('b=', b)
    c = np.array([3, 4, 5], ndmin=4)
    print('c=', c)
    # 3、隐式多维度
    d = np.array([[3, 4, 5], [6, 7, 8]])
    print('d=', d)
    # 4、显式多维度
    e = np.array([[3, 4, 5], [6, 7, 8]], ndmin=3)
    print('e=', e)
a= [3 4 5]
b= [3 4 5]
# ndmin的显式指定,4个纬度至少有4层中括号
c= [[[[3 4 5]]]]
d= [[3 4 5]
 [6 7 8]]
e= [[[3 4 5]
  [6 7 8]]]

2.复制、迭代器、指定范围等方式

numpy.asarray(a, dtype = None, order = None)
参数描述
a任意形式的输入参数,可以是,列表, 列表的元组, 元组, 元组的元组, 元组的列表,多维数组
dtype数据类型,可选
order可选,有”C”和”F”两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序。
asarray 参数说明
numpy.fromiter(iterable, dtype, count=-1)
参数描述
iterable可迭代对象
dtype返回数组的数据类型
count读取的数据数量,默认为-1,读取所有数据
fromiter 参数说明

numpy.arange(start, stop, step, dtype)
参数描述
start起始值,默认为0
stop终止值(不包含)
step步长,默认为1
dtype返回ndarray的数据类型,如果没有提供,则会使用输入数据的类型。
arange参数说明
    # 5、通过复制已有数组来创建数组
    f = np.asarray(e, dtype=float)
    print('copy array = ', f)
    # 6、通过传入一个迭代器创建数组
    g = np.fromiter(iter(range(6)), dtype=float)
    print('fromiter = ', g)

    # 7、指定起始范围及步长的方式, 可正序可倒序
    h = np.arange(2, 10, 1.5, dtype=float)
    print('arange = ', h)
    h = np.arange(20, 10, -1.5, dtype=float)
    print('arange = ', h)
copy array =  [[[3. 4. 5.]
  [6. 7. 8.]]]
fromiter =  [0. 1. 2. 3. 4. 5.]
arange =  [2.  3.5 5.  6.5 8.  9.5]
arange =  [20.  18.5 17.  15.5 14.  12.5 11. ]

3.一些特殊的数组

numpy.empty(shape, dtype = float, order = 'C')
参数描述
shape数组形状
dtype数据类型,可选
order有”C”和”F”两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序。
empty参数说明
numpy.zeros(shape, dtype = float, order = 'C')
参数描述
shape数组形状
dtype数据类型,可选
order‘C’ 用于 C 的行数组,或者 ‘F’ 用于 FORTRAN 的列数组
zeros参数说明
numpy.ones(shape, dtype = None, order = 'C')
参数描述
shape数组形状
dtype数据类型,可选
order‘C’ 用于 C 的行数组,或者 ‘F’ 用于 FORTRAN 的列数组
ones 参数说明
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
参数描述
start序列的起始值
stop序列的终止值,如果endpointtrue,该值包含于数列中
num要生成的等步长的样本数量,默认为50
endpoint该值为 true 时,数列中包含stop值,反之不包含,默认是True。
retstep如果为 True 时,生成的数组中会显示间距,反之不显示。
dtypendarray 的数据类型
linspace等差数列一维数组
np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
参数描述
start序列的起始值为:base ** start
stop序列的终止值为:base ** stop。如果endpointtrue,该值包含于数列中
num要生成的等步长的样本数量,默认为50
endpoint该值为 true 时,数列中中包含stop值,反之不包含,默认是True。
base对数 log 的底数。
dtypendarray 的数据类型
logspace等比数列一维数组
 # 8、指定形状创建数组
    # 1.空数组
    a = np.empty((3, 3), dtype=float)
    print('empty=', a)
    # 2.元素全是0的数组
    b = np.zeros((3, 3), dtype=int)
    print('zeros=', b)
    # 3.元素全是1的数组
    c = np.ones((2, 3), order='F')
    print('ones=', c)
    # 4.等差数列的一维数组
    d = np.linspace(1, 15, 5, False)
    print('不要尾值,等差 d= ', d)
    d = np.linspace(1, 15, 5, True)
    print('保留尾值,等差 d= ', d)
    # 5.创建等比数列的一维数组
    e = np.logspace(1, 2, 4, base=2.0)
    print('e= ', e)
    e = np.logspace(0, 2, 4)
    print('e= ', e)
empty= [[0.00e+000 0.00e+000 0.00e+000]
 [0.00e+000 0.00e+000 1.86e-321]
 [0.00e+000 0.00e+000 0.00e+000]]
zeros= [[0 0 0]
 [0 0 0]
 [0 0 0]]
ones= [[1. 1. 1.]
 [1. 1. 1.]]
不要尾值,等差 d=  [ 1.   3.8  6.6  9.4 12.2]
保留尾值,等差 d=  [ 1.   4.5  8.  11.5 15. ]
e=  [2.        2.5198421 3.1748021 4.       ]
e=  [  1.           4.64158883  21.5443469  100.        ]

numpy 数组属性 区别于 python list 清仓大甩卖

上篇关于numpy的文章主要介绍了numpy的数据结构,本篇旨在讲解numpy的数组属性,NumPy 数组的维数称为秩(rank),秩就是轴的数量,即数组的维度,一维数组的秩为 1,二维数组的秩为 2。

在 NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions)。axis=0,表示沿着第 0 轴进行操作,即对每一列进行操作;axis=1,表示沿着第1轴进行操作,即对每一行进行操作。

numpy 数组基本属性

代码撸一撸

import numpy as np

a = np.arange(32)
print(a.ndim)
print("a =", a)

b =[ _ for _ in range(32)]
print("b =", b)

c = a.reshape(2, 4, 4)
print(c.ndim)
print("c =", c)
print("c.shape =", c.shape)
print("c.dtype =", c.dtype)
print("c.itemsize =", c.itemsize)

输出结果:

1
a = [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
 24 25 26 27 28 29 30 31]
b = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]
3
c = [[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]
  [12 13 14 15]]

 [[16 17 18 19]
  [20 21 22 23]
  [24 25 26 27]
  [28 29 30 31]]]
c.shape = (2, 4, 4)
c.dtype = int32
c.itemsize = 4

上面的输出结果,我们是可以看到a和b的区别,这也是numpy数组和普通python list的表现形式上的区别,list带逗号分割元素,数组缺没有分隔符。

*知识扩展-Int8,Int16, Int32, Int64有什么区别呢?

计算机的基本的存储单元

  • 位(bit):二进制数中的一个数位,可以是0或者1,是计算机中数据的最小单位。二进制的一个“0”或一个“1”叫一位。
  • 字节(Byte,B):计算机中数据的基本单位,每8位组成一个字节。各种信息在计算机中存储、处理至少需要一个字节。

ASCIIS码: 1个英文字母(不分大小写)= 1个字节的空间
1个中文汉字 = 2个字节的空间
1个ASCII码 = 一个字节
UTF-8编码: 1个英文字符 = 1个字节
英文标点 = 1个字节
1个中文(含繁体) = 3个字节
中文标点 = 3个字节
Unicode编码: 1个英文字符 = 2个字节
英文标点 = 2个字节
1个中文(含繁体) = 2个字节
中文标点 = 2个字节

字(Word):两个字节称为一个字。汉字的存储单位都是一个字。

基本编码字节占用情况

而Int8,Int16,Int32,nt64,后面的数字就代表这个数据类型占据的空间。

Int8, 等于Byte, 占1个字节.
Int16, 等于short, 占2个字节. -32768 32767
Int32, 等于int, 占4个字节. -2147483648 2147483647
Int64, 等于long, 占8个字节. -9223372036854775808 9223372036854775807
这样, 看起来比short,int,long更加直观些!
另外, 还有一个Byte, 它等于byte, 0 - 255.

numpy 数据类型基础介绍 胡乱哔哩哔哩

NumPy 是 Python 科学计算的基础包,类型(dtype)很多。

numpy 支持的数据类型比 Python 内置的类型要多很多,基本上可以和 C 语言的数据类型对应上。numpy 的数值类型实际上是 dtype 对象的实例,并对应唯一的字符。

为什么要有数据类型?

其实对于很多行内的人来说这是一个老生常谈的问题,也是默认潜规则。凡事高级语言都要有数据类型,为什么?只要是小白或者刚入行的人会问这个问题。为啥非得要有数据结构,都用一个结构不好吗?不香吗

装逼的答案: curry-howard correspondence

稍微说人话的答案

  1. 对机器而言,类型描述了内存中的电荷是怎么解释的。
  2. 对编译器或者解释器而言,类型可以协助确保上面那些电荷、字节在程序的运行中始终如一地被理解。
  3. 对程序员而言,类型可以帮助他们命名、组织概念,帮助编纂文档,支持交互式编辑环境等。

再简单一点就是: 为了让计算机知道你要怎么用它

  1. 限制变量中所存储的数据(至少是可以兼容的)
  2. 限制变量所占空间

数据类型对象 (dtype)

  • 数据的类型(整数,浮点数或者 Python 对象)
  • 数据的大小(例如, 整数使用多少个字节存储)
  • 数据的字节顺序(小端法或大端法)
  • 在结构化类型的情况下,字段的名称、每个字段的数据类型和每个字段所取的内存块的部分
  • 如果数据类型是子数组,那么它的形状和数据类型是什么。
numpy 数据类型