📜  Python Numpy

📅  最后修改于: 2020-04-18 06:33:38             🧑  作者: Mango

Numpy是通用的数组处理程序包。它提供了一个高性能的多维数组对象,以及用于处理这些数组的工具。它是使用Python进行科学计算的基本软件包。
除了其明显的科学用途外,Numpy还可以用作通用数据的高效多维容器。

numpy中的数组

Numpy中的Array是元素表(通常是数字),所有元素都是相同类型的,由正整数元组索引。在Numpy中,数组的维数称为数组的秩。给出每个方向的数组大小的整数元组称为数组的形状。Numpy中的数组类称为ndarray。Numpy数组中的元素可以使用方括号访问,并且可以使用嵌套的Python列表进行初始化。

创建Numpy数组

Numpy中的数组可以通过多种方式创建,具有不同数量的Rank,用于定义数组的大小。也可以使用各种数据类型(例如列表,元组等)来创建数组。结果数组的类型是根据序列中元素的类型推导出来的。
注意:创建数组时可以显式定义数组的类型。

# 用于创建数组的Python程序
import numpy as np
# 创建rank=1数组
arr = np.array([1, 2, 3])
print("rank=1 数组: \n",arr)
# 创建rank=2数组
arr = np.array([[1, 2, 3],
                [4, 5, 6]])
print("rank=2 数组: \n", arr)
# 从元组创建数组
arr = np.array((1, 3, 2))
print("\n创建数组 "
      "通过元组:\n", arr)

输出:

rank=1 数组:
 [1 2 3]
rank=2数组:
 [[1 2 3]
 [4 5 6]]
创建数组 通过元组:
 [1 3 2]

访问数组索引
在numpy数组中,可以通过多种方式进行索引或访问数组索引。要打印数组的子集,请进行切片。数组的切片是在新数组中定义一个范围,该范围用于从原始数组中打印一系列元素。由于切片数组包含原始数组的一系列元素,因此在切片的帮助下修改数组内容将修改原始数组的内容。

# Python程序演示numpy数组中的索引
import numpy as np
# 初始数组
arr = np.array([[-1, 2, 0, 4],
                [4, -0.5, 6, 0],
                [2.6, 0, 7, 8],
                [3, -7, 4, 2.0]])
print("初始数组: ")
print(arr)
# 使用切片方法打印一系列Array
sliced_arr = arr[:2, ::2]
print ("具有前2行和"
    " 备用列(0和2):\n", sliced_arr)
# 在特定索引处打印元素
Index_arr = arr[[1, 1, 0, 3],
                [3, 2, 1, 0]]
print ("\n索引元素 (1, 3), "
    "(1, 2), (0, 1), (3, 0):\n", Index_arr)

输出:

初始数组:
[[-1.   2.   0.   4. ]
 [ 4.  -0.5  6.   0. ]
 [ 2.6  0.   7.   8. ]
 [ 3.  -7.   4.   2. ]]
具有前2行和交替列(0和2)的数组:
 [[-1.  0.]
 [ 4.  6.]]
索引为 (1, 3), (1, 2), (0, 1), (3, 0):
 [ 0. 54.  2.  3.]

基本数组操作
在numpy中,数组允许进行多种操作,这些操作可以在特定数组或数组组合上执行。这些运算包括一些基本的数学运算以及一元和二进制运算。

# Python程序演示单个数组上的基本操作
import numpy as np
# 定义数组1
a = np.array([[1, 2],
              [3, 4]])
# 定义数组2
b = np.array([[4, 3],
              [2, 1]])
# 每个元素加1
print ("每个元素加1:", a + 1)
# 从每个元素中减去2
print ("\n从每个元素中减去2:", b - 2)
# 数组元素之和
# 执行一元运算
print ("\n所有数组元素的总和 ", a.sum())
# 添加两个数组,执行二进制运算
print ("\n数组总和:\n", a + b)

输出:

每个元素加1:
 [[2 3]
 [4 5]]
从每个元素中减去2:
 [[ 2  1]
 [ 0 -1]]
所有数组元素的总和:  10
数组总和:
 [[5 5]
 [5 5]]

Numpy中的数据类型

每个Numpy数组都是一个元素表(通常是数字),所有元素都是相同类型的,并由一个正整数元组索引。每个ndarray都有一个关联的数据类型(dtype)对象。该数据类型对象(dtype)提供有关数组布局的信息。ndarray的值存储在缓冲区中,缓冲区可以被视为连续的内存字节块,可以由dtype对象解释。Numpy提供了大量可用于构造数组的数字数据类型。在创建数组时,Numpy会尝试猜测一个数据类型,但是构造数组的函数通常还包含一个可选参数来显式指定该数据类型。
构造数据类型对象
在Numpy中,除非需要特定的数据类型,否则无需定义数组的数据类型。Numpy尝试猜测构造函数中未预定义的数组的数据类型。

#Python程序创建数据类型对象
import numpy as np
# Numpy猜测的整数数据类型
x = np.array([1, 2])
print("整数数据类型: ")
print(x.dtype)
# Numpy猜测的float数据类型
x = np.array([1.0, 2.0])
print("\nfloat数据类型: ")
print(x.dtype)
# 强制数据类型
x = np.array([1, 2], dtype = np.int64)
print("\n强制数据类型: ")
print(x.dtype)

输出:

整数数据类型:
int64
float数据类型:
float64
强制数据类型:
int64

DataType数组上的数学运算
在Numpy数组中,基本数学运算在该数组上逐元素执行。这些操作既可以用作运算符重载,也可以用作函数。Numpy中提供了许多有用的函数来对数组执行计算,例如sum:用于添加数组元素;T:用于元素转置等。

# Python程序创建数据类型对象
import numpy as np
# Array1
arr1 = np.array([[4, 7], [2, 6]],
                 dtype = np.float64)
# Array2
arr2 = np.array([[3, 6], [2, 8]],
                 dtype = np.float64)
# 两个数组相加
Sum = np.add(arr1, arr2)
print("两个数组的加法: ")
print(Sum)
# 使用预定义的sum方法添加所有Array元素
Sum1 = np.sum(arr1)
print("\n数组元素的加法: ")
print(Sum1)
# 数组的平方根
Sqrt = np.sqrt(arr1)
print("\nArray1元素的平方根: ")
print(Sqrt)
# 使用内置函数“T"转置数组
Trans_arr = arr1.T
print("\n数组转置: ")
print(Trans_arr)

输出:

两个数组的加法:
[[ 7. 13.]
 [ 4. 14.]]
数组元素的加法:
19.0
Array1元素的平方根:
[[2.         2.64575131]
 [1.41421356 2.44948974]]
数组转置:
[[4. 2.]
 [7. 6.]]