NumPy是Python中科学计算的基础包。它是一个Python库,提供多维数组对象,各种派生对象(如掩码数组和矩阵),以及用于数组快速操作的各种API,有包括数学、逻辑、形状操作、排序、选择、输入输出、离散傅立叶变换、基本线性代数,基本统计运算和随机模拟等等。

详细学习可前往numpy中文网:https://www.numpy.org.cn/

numpy必拿下

  • 创建数组:
  • 数组的计算:
  • 数组的索引、切片、迭代

创建数组:

可以使用array函数从常规Python列表或元组中创建数组。得到的数组的类型是从Python列表中元素的类型推导出来的。即数组元素类型和Python列表或元组里的元素类型相同

(代码的运行结果将会写在注释中)

import numpy as np

#将列表转换为数组
array = np.array([[1,2,3],
[4,5,6]])
print(array)

#[[1 2 3]
# [4 5 6]]
array = np.array(((1,2,3),
(4,5,6)))
print(array)
#[[1 2 3]
# [4 5 6]]

若数组元素未知,但是数组大小已知,NumPy提供了几个函数来创建具有初始占位符内容的数组。

  1. zeros():可以创建指定长度或者形状的全0数组
  2. ones():可以创建指定长度或者形状的全1数组
  3. empty():创建一个数组,其初始内容是随机的,取决于内存的状态
import numpy as np

zeroarray = np.zeros((2,3))
print(zeroarray)
#[[0. 0. 0.]
# [0. 0. 0.]]

onearray = np.ones((3,4))
print(onearray)
#[[1. 1. 1. 1.]
# [1. 1. 1. 1.]
# [1. 1. 1. 1.]]

emptyarray = np.empty((3,4))
print(emptyarray)
# [[1. 1. 1. 1.]
# [1. 1. 1. 1.]
# [1. 1. 1. 1.]]

为了创建数字组成的数组,NumPy提供了一个类似于range的函数,使用方法同类似于range函数

import numpy as np

array = np.arange( 10, 31,5 )
print(array)
#[10 15 20 25 30]

输出数组信息:

import numpy as np

array = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
print(array)
# [[ 1 2 3]
# [ 4 5 6]
# [ 7 8 9]
# [10 11 12]]

#数组维度
print(array.ndim)
#2

#数组形状
print(array.shape)
#(4, 3)

#数组元素个数
print(array.size)
#12

#数组元素类型
print(array.dtype)
#int32

数组的计算:

基础运算:

import numpy as np

arr1 = np.array([[1,2,3],[4,5,6]])
arr2 = np.ones([2,3])

print(arr1 + arr2)
# [[2. 3. 4.]
# [5. 6. 7.]]

print(arr1 - arr2)
# [[0. 1. 2.]
# [3. 4. 5.]]

print(arr1 * arr2)
# [[1. 2. 3.]
# [4. 5. 6.]]

print(arr2 / arr1)
# [[1. 0.5 0.33333333]
# [0.25 0.2 0.16666667]]

print(arr1 ** 2)
# [[ 1 4 9]
# [16 25 36]]

值得注意的是,这里的运算是矩阵对应元素的运算,包括乘以及幂运算。因此如果两个矩阵大小不一,会产生错误。

矩阵乘法

import numpy as np

arr3 = np.array([[1,2,3],[4,5,6]])
arr4 = np.ones([3,2],dtype=np.int64)
print(np.dot(arr3,arr4))
# [[ 6 6]
# [15 15]]

矩阵的转置和flatten(这个中文不太好描述…变平??)

import numpy as np

arr3 = np.array([[1,2,3],[4,5,6]])
arr3_tran = arr3.transpose()
print(arr3)
# [[1 2 3]
# [4 5 6]]

print(arr3_tran)
# [[1 4]
# [2 5]
# [3 6]]

print(arr3.flatten())
# [1 2 3 4 5 6]

数组的索引、切片、迭代

同python其他序列类型一样

import numpy as np

arr5 = np.arange(0,6).reshape([2,3])
print(arr5)
# [[0 1 2]
# [3 4 5]]

print(arr5[1])
#[3 4 5]

print(arr5[1][2])
#5

print(arr5[1,2])
#5

print(arr5[1,:])
#[3 4 5]

print(arr5[:,1])
#[1 4]

print(arr5[1,0:2])
# [3 4]

for i in arr5:
print(i**2)
#[0 1 4]
#[ 9 16 25]

基础操作大概这些,更多内容还是要去Numpy中文网:https://www.numpy.org.cn/

本文如果有错误,或者对内容存在问题,欢迎在评论区交流~



更多内容详见微信公众号:Python研究所

Python库 numpy基础内容学习笔记_数组元素