💕Python:有关ndarray常用方法

65 阅读5分钟

代码:

import numpy as np

# ravel
# 副本和视图的区别
# 视图
arr = np.array([np.arange(1, 5), np.arange(5, 9)])
print(arr)
print(type(arr))
# brr = arr.ravel() # 默认按行展平成一维数组,返回的是一个视图
brr = arr.ravel(order='F') # 默认按列展平成一维数组,返回的是一个副本
print(brr)
# 如果修改视图/副本brr的任意一个元素,原数组arr是否相应的发生改变
brr[0] = 100
print(brr)
print(arr)
# faltten
crr = arr.flatten(order='F')
print(crr)
crr[0] = 100
print(crr)
print(arr)

arr[0, 0] = 1000
print(arr)
# astype
print(arr.dtype)
drr = arr.astype(np.int8)
print(drr)
# fill
err = np.zeros((3, 3))
print(err)
err.fill(10)
print(err)

# sum prod
# sum
arr = np.random.randint(1, 100, (3, 4))
print(arr)
print(arr.sum())
print(arr.sum(axis=0)) # 按列求和
print(arr.sum(axis=1)) # 按行求和
# prod
arr = arr.astype(np.int64)
print(arr.prod())
print(arr.prod(axis=0)) # 按列求累积
print(arr.prod(axis=1)) # 按行求累积

# mean var std
# mean
print(arr.mean())
print(arr.mean(axis=0)) # 按列求平均数
print(arr.mean(axis=1)) # 按行求平均数
# var
print(arr.var())
print(arr.var(axis=0)) # 按列求方差
print(arr.var(axis=1)) # 按行求方差
# std
print(arr.std())
print(arr.std(axis=0)) # 按列求标准差
print(arr.std(axis=1)) # 按行求标准差

# max min ptp median
# max
print(arr.max())
print(arr.max(axis=0)) # 求每一列的最大值
print(arr.max(axis=1)) # 求每一行的最大值
# min
print(arr.min())
print(arr.min(axis=0)) # 求每一列的最小值
print(arr.min(axis=1)) # 求每一行的最小值
# ptp
print(arr.ptp()) # 整个数组的波动范围
print(arr.ptp(axis=0)) # 求每一列的波动范围
print(arr.ptp(axis=1)) # 求每一行的波动范围
# median
print(np.median(arr)) # 整个数组的中位数
print(np.median(arr, axis=0)) # 求每一列的中位数
print(np.median(arr, axis=1)) # 求每一行的中位数

# argmax argmin
# argmax
print(arr)
print("最大值的索引位置:", arr.argmax())
print("每一行最大值的索引:", arr.argmax(axis=1))
print("每一列最大值的索引:", arr.argmax(axis=0))
# argmin
print(arr)
print("最小值的索引位置:", arr.argmin())
print("每一行最小值的索引:", arr.argmin(axis=1))
print("每一列最小值的索引:", arr.argmin(axis=0))

# view copy
arr = np.random.randint(10, 1000, (4, 6))
brr = arr.view()
brr.sort()
print("视图: \n", brr)
print("原数组: \n", arr)
c = arr.copy()
c.sort()
print("副本: \n", c)
print("原数组: \n", arr)

# compress
arr = np.random.randint(10, 100, (4, 3), dtype=np.int64)
print((arr > 50).flatten())
new_data = np.compress((arr > 50).flatten(), arr)
print(new_data)

# transpose 多维数组的转置
arr = np.array([[np.arange(1,4), np.arange(2,5)], [np.arange(1,4), np.arange(2,5)]])
print(arr)
print(arr.ndim)
print(arr.shape)
brr = arr.transpose(0, 2, 1)
print(brr.shape)
print(brr)

# hstack vstack concatenate
# hstack:水平方向拼接
arr = np.array([np.arange(3, 7), np.arange(2, 6)])
brr = np.array([np.arange(1, 5), np.arange(2, 6)])
print("arr:\n", arr)
print("brr:\n", brr)
crr = np.hstack([arr, brr])
print("crr:\n", crr)
# vstack:垂直方向拼接
drr = np.vstack([arr, brr])
print("drr:\n", drr)
# concatenate:水平方向拼接
err = np.concatenate([arr, brr], axis=1)
print("err:\n", err)
# concatenate:垂直方向拼接
frr = np.concatenate([arr, brr], axis=0)
print("frr:\n", frr)

# hsplit vsplit split
# hsplit:水平方向分割
ls = np.hsplit(crr, 4) # 份数
print(ls)
ls = np.hsplit(arr, [3])
print(ls)
# vsplit:垂直方向分割
ls = np.vsplit(drr, 2)
print(ls)
# split:水平方向分割
ls = np.split(crr, 4, axis=1)
print(ls)
# split:垂直方向分割
ls = np.split(drr, 2, axis=0)
print(ls)

# loadtxt()函数读取文件
data = np.loadtxt(
    "test.csv",
    encoding="utf-8",
    delimiter=",",
    skiprows=1,
    usecols=(1),
    dtype=np.int64
)
print(data)

# savetxt()函数写文件
np.savetxt(
    "data.csv", # 文件名称
    drr, # 需要写入的数组对象
    fmt="%d", # 整型字符串
    delimiter=",", # 分隔符
    encoding="utf-8",
    header="一,二,三,四", # 标题行
    footer="这是结尾", # 结尾行
    comments="" # 注释
)

ndarray常用方法

astype()方法:

用于将数组的元素类型(dtype)转换为指定的类型。这个方法创建并返回一个新的数组,具有指定的数据类型,而原始数组保持不变

基本语法:

new_array = array.astype(dtype, copy=True,order='K')

sum()方法:

求和

基本语法:

numpy.sum(a,axis=None,dtype=None)

prod()方法:

求乘积

基本语法:

numpy.prod(a,axis=None,dtype=None)

mean()方法:

平均值

基本语法:

numpy.mean(a,axis=None,dtype=None)

var()方法:

方差:表示数据与其均值之间的偏离程度

基本语法:

numpy.var(a,axis=None,dtype=None)

std()方法:

标准差

基本语法:

numpy.std(a,axis=None,dtype=None)

max()方法:

最大值

基本语法:

numpy.max(a,axis=None)

min()方法:

最小值

基本语法:

numpy.min(a,axis=None)

ptp()方法:

最大值与最小值的差

基本语法:

numpy.ptp(a,axis=None)

median()方法:

中位数

基本语法:

numpy.median(a,axis=None)

argmax()方法:

返回数组中最大值的索引位置

基本语法:

numpy.argmax(a,axis=None)

argmin()方法:

返回数组中最小值的索引位置

基本语法:

numpy.argmin(a,axis=None)

transpose()方法:

多维数组的转置

Sort()方法:

用于对数组进行排序,可以沿指定的轴对数组进行升序排序,并返回排序后的新数组,而不会改变原数组。也可以使用axis参数指定排序的方向,使用kind参数选择不同的排序方法。

基本语法:

numpy.sort(a,axis=-1,kind=None)

view()方法:

创建一个数组的视图(即对原数组的引用),而不是复制数据

基本语法:

ndarray.view(dtype=None, type=None)

copy()方法:

创建一个数组的视图(即对原数组的引用),而不是复制数据

基本语法:

ndarray.copy(dtype=None, type=None)

tolist()方法:

用于将数组转换为Python的原生列表(list)类型

基本语法:

ndarray.tolist( )

compress()方法:

用于筛选数组元素的函数,它根据提供的布尔数组或索引数组,从原数组中提取满足条件的元素

基本语法:

numpy.compress(condition, a, axis=None)

hstack()方法:

将两个数组在水平方向拼接

基本语法:

C = hstack((A,B))

vstack()方法:

将两个数组在垂直方向拼接

基本语法:

C = vstack((A,B))

concatenate()方法:

将两个数组拼接,当axis=1时,在水平方向进行拼接;当axis=0时,在垂直方向进行拼接。

基本语法:

水平:C = concatenate((A,B), axis = 1) 垂直:C = concatenate((A,B), axis = 0)

hsplit()方法:

将两个数组在水平方向上进行分隔

基本语法:

B = hsplit(A, n)

vsplit()方法:

将两个数组在垂直方向上进行分隔

基本语法:

B = vsplit(A, n)

split()方法:

分隔数组。当axis=1时,在水平方向进行分隔;当axis=0时,在垂直方向进行分隔。

基本语法:

水平:B = split(A, n, axis=1) 垂直:C = split(A, n, axis=0)