引言

本文参考《利用Python进行数据分析》(第二版)作者:WesMcKinney以及原书配套代码,笔者在原文及原代码的基础上加以修改,感谢作者和译者的贡献。

1.ndarray

ndarray,即N维数组对象,是numpy中最为核心的大型数据集容器,正是ndarray完成了对于整块数据的整体操作计算而非使用多重循环。

1.1 ndarray的生成

1.1.1接收序列

利用np.array可自动将序列转换为n维数组

data1 = [6, 7.5, 8, 0, 1]
arr1 = np.array(data1)
arr1
#-------------------------------
data2 = [[1, 2, 3, 4], [5, 6, 7, 8]]
arr2 = np.array(data2)
arr2

可以利用.ndim查看维度数.shape查看形状.dtype数据的类型
具体的,np.array函数的具体参数内容如下:

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
1.1.2特殊函数

除了使用np.array构建函数,还能通过以下函数构建:

  • np.asarray(a, dtype=None, order=None, *, like=None)
    需要注意的是,np.array和np.asarray作用基本相同,都是将输入转换为ndarray,但是,区别是当输入已经是ndarray时,array仍然会copy出一个副本,但asarray不再复制。如下例(

原文链接:https://blog.csdn.net/Rex_WUST/article/details/85205179

):
当输入是python原生的序列时

import numpy as np
 
#example 1:
data1=[[1,1,1],[1,1,1],[1,1,1]]
arr2=np.array(data1)
arr3=np.asarray(data1)
data1[1][1]=2
print 'data1:\n',data1
print 'arr2:\n',arr2
print 'arr3:\n',arr3

输出如下:

data1:
[[1, 1, 1], [1, 2, 1], [1, 1, 1]]
arr2:
[[1 1 1]
 [1 1 1]
 [1 1 1]]
arr3:
[[1 1 1]
 [1 1 1]
 [1 1 1]]

当输入是numpy中的ndarray时:

import numpy as np

#example 2:
arr1=np.ones((3,3))
arr2=np.array(arr1)
arr3=np.asarray(arr1)
arr1[1]=2
print 'arr1:\n',arr1
print 'arr2:\n',arr2
print 'arr3:\n',arr3

其输出结果为

arr1:
[[ 1.  1.  1.]
[ 2.  2.  2.]
[ 1.  1.  1.]]
arr2:
[[ 1.  1.  1.]
[ 1.  1.  1.]
[ 1.  1.  1.]]
arr3:
[[ 1.  1.  1.]
[ 2.  2.  2.]
[ 1.  1.  1.]]

注:numpy和一般的编程语言不同,变量在转接过程中都直接指向原数组,并不会自动完成copy开辟新的内存空间,如果需要复制,则需要显式利用.copy完成。
既然谈及了copy,就不得不提及原书在4.1.4索引与切片中才提及的视图。所谓视图,就是所有切片或者索引都是对于原数组的反映,对于切片的任何操作都会直观反应到原数组上,如下图所示:
视图

  • numpy.zeros()
    创建全零数组。
    numpy.zeros(shape, dtype=float, order=‘C’)
    参数说明:

    shape:数组的形状,可以是整数(一维数组)或元组(多维数组)。

    dtype:数组的数据类型,默认为 float。

    order:指定数组的内存布局。‘C’ 为行优先,‘F’ 为列优先。

    示例:

    a = np.zeros(5)
    print(a)  # 输出: [0. 0. 0. 0. 0.]
    
    b = np.zeros((2, 3), dtype=int)
    print(b)
    # 输出:
    # [[0 0 0]
    #  [0 0 0]]
    
  • numpy.ones()
    创建全一数组。

    numpy.ones(shape, dtype=float, order=‘C’)
    参数说明:

    同 numpy.zeros()。

    示例:

    a = np.ones(5)
    print(a)  # 输出: [1. 1. 1. 1. 1.]
    
    b = np.ones((2, 3), dtype=int)
    print(b)
    # 输出:
    # [[1 1 1]
    #  [1 1 1]]
    
  • numpy.empty()
    创建未初始化的数组(内容随机)。

    numpy.empty(shape, dtype=float, order=‘C’)
    参数说明:

    同 numpy.zeros()。

    示例:

    a = np.empty(5)
    print(a)  # 输出: [随机值 随机值 随机值 随机值 随机值]
    
  • numpy.arange()
    创建等差数组。

    numpy.arange([start,] stop, [step,], dtype=None)
    参数说明:

    start:起始值,默认为 0。

    stop:结束值(不包含)。

    step:步长,默认为 1。

    dtype:数组的数据类型。

示例:

a = np.arange(5)
print(a)  # 输出: [0 1 2 3 4]

b = np.arange(1, 10, 2)
print(b)  # 输出: [1 3 5 7 9]
  • numpy.linspace()
    创建等间隔数组。

    numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
    参数说明:

    start:起始值。

    stop:结束值。

    num:生成的样本数,默认为 50。

    endpoint:是否包含结束值,默认为 True。

    retstep:如果为 True,则返回数组和步长。

    dtype:数组的数据类型。

    示例:

a = np.linspace(0, 1, 5)
print(a)  # 输出: [0.   0.25 0.5  0.75 1.  ]
  • numpy.eye()
    创建单位矩阵。

    numpy.eye(N, M=None, k=0, dtype=float, order=‘C’)
    参数说明:

    N:行数。

    M:列数(默认为 N)。

    k:对角线的偏移量。k=0 为主对角线,k>0 为上对角线,k<0 为下对角线。

    dtype:数组的数据类型。

    order:指定数组的内存布局。

    示例:

a = np.eye(3)
print(a)
# 输出:
# [[1. 0. 0.]
#  [0. 1. 0.]
#  [0. 0. 1.]]
  • numpy.random 相关函数
    用于创建随机数组。

    1. numpy.random.rand()
      创建均匀分布的随机数组。

      numpy.random.rand(d0, d1, …, dn)
      参数说明:

      d0, d1, …, dn:数组的维度。

      示例:

    a = np.random.rand(2, 3)
    print(a)
    # 输出:
    # [[0.123 0.456 0.789]
    #  [0.234 0.567 0.891]]
    
  1. numpy.random.randn()
    创建标准正态分布的随机数组。

    numpy.random.randn(d0, d1, …, dn)
    参数说明:

    同 numpy.random.rand()。

    示例:

    a = np.random.randn(2, 3)
    print(a)
    # 输出:
    # [[-0.123  0.456 -0.789]
    #  [ 1.234 -0.567  0.891]]
    
  • numpy.full()
    创建指定值的数组。

    numpy.full(shape, fill_value, dtype=None, order=‘C’)
    参数说明:

    shape:数组的形状。

    fill_value:填充值。

    dtype:数组的数据类型。

    order:指定数组的内存布局。

    示例:

    a = np.full((2, 3), 7)
    print(a)
    # 输出:
    # [[7 7 7]
    #  [7 7 7]]
    
  • numpy.identity()
    创建单位矩阵(与 numpy.eye() 类似)。

    numpy.identity(n, dtype=float)
    参数说明:

    n:矩阵的行数和列数。

    dtype:数组的数据类型。

    示例:

    a = np.identity(3)
    print(a)
    # 输出:
    # [[1. 0. 0.]
    #  [0. 1. 0.]
    #  [0. 0. 1.]]
    

2.1 ndarray的类型

数据类型 描述字符 代码
int8 8 位有符号整数(-128 到 127) 'i1'
int16 16 位有符号整数(-32768 到 32767) 'i2'
int32 32 位有符号整数(-2147483648 到 2147483647) 'i4'
int64 64 位有符号整数(-9223372036854775808 到 9223372036854775807) 'i8'
uint8 8 位无符号整数(0 到 255) 'u1'
uint16 16 位无符号整数(0 到 65535) 'u2'
uint32 32 位无符号整数(0 到 4294967295) 'u4'
uint64 64 位无符号整数(0 到 18446744073709551615) 'u8'
float16 16 位浮点数(半精度) 'f2'
float32 32 位浮点数(单精度) 'f4'
float64 64 位浮点数(双精度) 'f8'
float128 128 位浮点数(扩展精度,取决于平台) 'f16'
complex64 64 位复数,由两个 32 位浮点数组成(实部和虚部) 'c8'
complex128 128 位复数,由两个 64 位浮点数组成(实部和虚部) 'c16'
complex256 256 位复数,由两个 128 位浮点数组成(实部和虚部,取决于平台) 'c32'
bool_ 布尔类型(True 或 False) '?'
object_ Python 对象类型 'O'
string_ 固定长度的字符串类型(默认长度为 1) 'S'
unicode_ 固定长度的 Unicode 字符串类型(默认长度为 1) 'U'
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐