欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

处理Excel的Python算法_3_:数组计算的数学模块——NumPy(上)

程序员文章站 2022-04-02 10:47:10
索引NumPy官方文档Quickstart基本对象--nArray创建Array的几种方式打印Array基本操作NumPy官方文档官方网站:https://numpy.org/Quickstart基本对象–nArrayimport numpy as npa = np.arange(15).reshape(3, 5)print("对象",a.data)print("对象类型",type(a))print("对象数据:",a)print("维度:",a.ndim)print("元素类...

NumPy官方文档

处理Excel的Python算法_3_:数组计算的数学模块——NumPy(上)

Quickstart

基本对象–nArray

import numpy as np
a = np.arange(15).reshape(3, 5)
print("对象",a.data)
print("对象类型",type(a))
print("对象数据:",a)
print("维度:",a.ndim)
print("元素类型:",a.dtype.name)
print("元素长度:",a.itemsize)
print("数组大小:",a.size)

创建Array的几种方式

import numpy as np
# 创建方式1:直接输入数组
a = np.array((1.5,2,3))# 一维数组
b = np.array([(1.5,2,3), (4,5,6)]) # 多维数组
c = np.array( [ [1,2], [3,4] ], dtype=complex ) # 限定元素类型

# 创建方式2:从a到b间隔为c
np.arange( 10, 30, 5 ) # array([10, 15, 20, 25]) 

# 创建方式3:从a到b的n个数
np.linspace( 0, 2, 9 ) # 从0到2的9个数
x = np.linspace( 0, 2*pi, 100 ) # 可应用于在多个点上对函数求值
f = np.sin(x) # sin函数作用于x的每个元素得到新的数组

打印Array

a = np.arange(6)                  # 1d array
print(a)
b = np.arange(12).reshape(4,3)    # 2d array
print(b)
c = np.arange(24).reshape(2,3,4)  # 3d array
print(c)
# 当数组过长时,默认打印部分
print(np.arange(10000))
print(np.arange(10000).reshape(100,100))
# 通过一下方式修改最大打印长度
import sys
np.set_printoptions(threshold=sys.maxsize)

基本操作

'''基本操作'''
import numpy as np
a = np.array( [20,30,40,50] ) # [20 30 40 50]
b = np.arange( 4 ) # [0 1 2 3]
c = a-b # [20 29 38 47]
print(b**2) # [0 1 4 9]
print(10*np.sin(a)) # [0.91294525 -0.98803162  0.74511316 -0.26237485]
print(a<35) # [True  True False False]

'''矩阵乘法&矩阵积'''
import numpy as np
A = np.array( [[1,1],[0,1]] )
B = np.array( [[2,0],[3,4]] )
print(A * B)                       # elementwise product:array([[2, 0],[0, 4]])
print(A @ B)                       # matrix product矩阵积:array([[5, 4],[3, 4]])
print(A.dot(B))                    # another matrix product矩阵积:array([[5, 4],[3, 4]])

'''数乘&加减'''
import numpy as np
a = np.ones((2,3), dtype=int) # 元素为整数1
rg = np.random.default_rng(1)     # create instance of default random number generator
b = rg.random((2,3)) # 元素为0-1随机浮点数
a *= 3  # 所有元素×3
b += a  # 对应位置元素相加,b浮点型兼容a整型
a += b  # 错误:b浮点型无法自动转化为a整型

'''高精度兼容低精度'''
import numpy as np
a = np.ones(3, dtype=np.int32)
b = np.linspace(0,np.pi,3)
print(b.dtype.name) # float64
c = a+b # [1. 2.57079633 4.14159265]
print(c.dtype.name) # float64
d = np.exp(c*1j) # [ 0.54030231+0.84147098j -0.84147098+0.54030231j -0.54030231-0.84147098j]
print(d.dtype.name) # complex128

基本函数

'''基本一元运算函数'''
import numpy as np
rg = np.random.default_rng(1)
a = rg.random((1,3))
print(a) # [[0.51182162 0.9504637  0.14415961]]
print(a.sum()) # 1.6064449337458258
print(a.min()) # 0.14415961271963373
print(a.max()) # 0.9504636963259353

'''限定一元运算函数'''
b = np.arange(12).reshape(3,4)
print(b)
print(b.sum(axis=0))                            # sum of each column
print(b.min(axis=1))                          # min of each row
print(b.cumsum(axis=1))                         # cumulative sum along each row

'''通用函数'''
import numpy as np
B = np.arange(3) # [0 1 2]
print(np.exp(B)) # [1.  2.71828183 7.3890561 ]
print(np.sqrt(B)) # [0. 1.         1.41421356]
C = np.array([2., -1., 4.])
print(np.add(B, C)) # [2. 0. 6.]
# 其他:all, any, apply_along_axis, argmax, argmin, argsort, average, bincount, ceil, clip, conj, corrcoef, cov, cross, cumprod, cumsum, diff, dot, floor, inner, invert, lexsort, max, maximum, mean, median, min, minimum, nonzero, outer, prod, re, round, sort, std, sum, trace, transpose, var, vdot, vectorize, where

索引、切片、循环

'''一维数组: 如同列表和其他Python序列一样'''
import numpy as np
a = np.arange(10)**3 # [  0   1   8  27  64 125 216 343 512 729]
print(a[2]) # 8
print(a[2:5]) # [ 8 27 64]
a[:6:2] = 1000 # [1000    1 1000   27 1000  125  216  343  512  729]
print(a[ : :-1]) # [ 729  512  343  216  125 1000   27 1000    1 1000]
for i in a: # 遍历
    print(i**(1/3.))
    
'''二维:多维数组每个轴可以有一个索引。这些索引以元组给出,并用逗号分隔'''
def f(x,y):return 10*x+y # 创建行列为参数的函数
b = np.fromfunction(f,(5,4),dtype=int)
#array([[ 0,  1,  2,  3],
#       [10, 11, 12, 13],
#       [20, 21, 22, 23],
#       [30, 31, 32, 33],
#       [40, 41, 42, 43]])
print(b[2,3]) # 23
print(b[0:5, 1])# 每行的第二个元素:array([ 1, 11, 21, 31, 41])
print(b[ : ,1]) # 同上:array([ 1, 11, 21, 31, 41])
print(b[1:3, : ])# 每列的第二个元素、每列的第三个元素:array([[10, 11, 12, 13],[20, 21, 22, 23]])
print(b[-1]) # 倒数第一行Equivalent to b[-1,:]
'''如果选中单行或单列,索引结果展示为一维数组,若多行多列则按原来的位置关系呈现为多维数组'''

'''缩写'''
c = np.array( [[[  0,  1,  2],[ 10, 12, 13]],
               [[100,101,102],[110,112,113]]])
c.shape    # (2, 2, 3)
c[1,...]   # same as c[1,:,:] or c[1]
c[...,2]   # same as c[:,:,2]

'''迭代'''
# 相对第一个轴迭代
for row in b:
    print(row)
# 迭代所有元素
for element in b.flat:
    print(element)

本文地址:https://blog.csdn.net/qq_41960416/article/details/110821996