目录
1、数组相加
import numpy as np
arr01 = np.array([[1, 2, 3],[4, 5, 6]])
arr02 = np.array([10, 20, 30])
#将arr02扩展为(2,3)形状,并将加到对应元素
arr03 = arr01 + arr02
print(arr03)
'''
运行结果
[[11 22 33]
[14 25 36]]
'''
2、nditer()函数
#nditer:用于快速遍历多维数组的元素
# oeder:指定数组的遍历顺序
# flags:指定遍历的细节
# op_dtypes:指定遍历的元素的数据类型
def arr_nditer():
arr = np.array([[1, 2, 3],[4, 5, 6]])
for i in np.nditer(arr,order = "C"):
print(i, end = " ")
print()
for j in np.nditer(arr,order = "F"):
print(j, end = " ")
print()
for k in arr:
print(k)
if __name__ == "__main__":
arr_nditer()
3、flat()函数
# import numpy as np
# arr.flat:返回一维数组迭代器,按行遍历
def arr_flat():
arr = np.arange(1,11).reshape(2,5)
for i in arr.flat:
print(i, end = " ")
if __name__ == "__main__":
arr_flat()
4、flatten()
# import numpy as np
# arr.flatten():返回一个新的一维数组,不影响原数组的形状
# order:C为行优先,F为列优先
def arr_flatten():
arr = np.arange(1,11).reshape(2,5)
print(arr.flatten(order="F"))
if __name__ == "__main__":
arr_flatten()
参数
order: 指定数组的展开顺序。
-
'C'
:按行优先顺序展开(默认)。 -
'F'
:按列优先顺序展开。 -
'A'
:如果原数组是 Fortran 连续的,则按列优先顺序展开;否则按行优先顺序展开。 -
'K'
:按元素在内存中的顺序展开。
5、 raval()
# import numpy as np
# arr.raval(): 当修改raval返回的数组中的元素时,原数组也会发生变化
# arr.flatten():当修改flatten返回的数组中的元素时,原数组不会发生变化
def arr_raval():
arr = np.arange(1,11).reshape(2,5)
arr01 = arr.ravel()
print(arr01)
print()
arr[-1] = 10
print(arr)
print()
arr01[-1] = 20
print(arr)
if __name__ == "__main__":
arr_raval()
参数
order: 指定数组的展开顺序。
-
'C'
:按行优先顺序展开(默认)。 -
'F'
:按列优先顺序展开。 -
'A'
:如果原数组是 Fortran 连续的,则按列优先顺序展开;否则按行优先顺序展开。 -
'K'
:按元素在内存中的顺序展开。
6、transpose()
函数名称 | 说明 |
---|---|
transpose | 将数组的维度值进行对换,比如二维数组维度(2,4)使用该方法后为(4,2) |
ndarray.T | 与 transpose 方法相同 |
# import numpy as np
# transpose():返回原数组的转置
def transpose():
arr = np.arange(1,7).reshape(2,3)
print(arr)
print()
arr01 = arr.transpose()
print(arr01)
print()
arr02 = arr.T
print(arr02)
if __name__ == "__main__":
transpose()
7、改变数组维度
函数名称 | 参数 | 说明 |
---|---|---|
expand_dims(arr, axis) | arr:输入数组 axis:新轴插入的位置 | 在指定位置插入新的轴(相对于结果数组而言),从而扩展数组的维度 |
squeeze(arr, axis) | arr:输入数的组 axis:取值为整数或整数元组,用于指定需要删除的维度所在轴,指定的维度值必须为 1 ,否则将会报错,若为 None,则删除数组维度中所有为 1 的项 | 删除数组中维度为 1 的项 |
# import numpy as np
#expand_dims():在指定axis轴扩展数组的维度
# squeeze():按指定的axis轴降低数组的维度,前提是数组维度为1
# axis:指定交换的轴
def axis_dims():
arr = np.arange(1,7).reshape(2,3)
print(arr)
print()
arr01 = np.expand_dims(arr, axis = 0)
print(arr01)
print()
arr2 = np.arange(1,7).reshape(1,6)
print(arr2)
arr3 = np.squeeze(arr2, axis = 0)
print(arr3)
print()
if __name__ == "__main__":
axis_dims()
8、数组连接
函数名称 | 参数 | 说明 |
---|---|---|
hstack(tup) | tup:可以是元组,列表,或者numpy数组,返回结果为numpy的数组 | 按水平顺序堆叠序列中数组(列方向) |
vstack(tup) | tup:可以是元组,列表,或者numpy数组,返回结果为numpy的数组 | 按垂直方向堆叠序列中数组(行方向) |
hstack函数要求堆叠的数组在垂直方向(行)上具有相同的形状。如果行数不一致,hstack() 将无法执行,并会抛出 ValueError 异常。
hstack() 要求堆叠的数组在垂直方向(行)上具有相同的形状。如果列数不一致,将无法执行堆叠操作。
vstack() 和 hstack() 要求堆叠的数组在某些维度上具有相同的形状。如果维度不一致,将无法执行堆叠操作。
#import numpy as np
# 数组连接
def arr_tup():
arr_one = np.arange(1, 7).reshape(2, 3)
arr_two = np.arange(7, 15).reshape(2, 4)
# 水平连接数组
re_one = np.hstack((arr_one, arr_two))
print(re_one)
print()
# 垂直连接数组
arr_three = np.arange(7, 19).reshape(4, 3)
print(arr_three)
print()
re_two = np.vstack((arr_one, arr_three))
print(re_two)
if __name__ == "__main__":
arr_tup()
9、数据分割
函数名称 | 参数 | 说明 |
---|---|---|
hsplit(ary, indices_or_sections) | ary:原数组 indices_or_sections:按列分割的索引位置 | 将一个数组水平分割为多个子数组(按列) |
vsplit(ary, indices_or_sections) | ary:原数组 indices_or_sections:按列分割的索引位置 | 将一个数组垂直分割为多个子数组(按行) |
# import numpy as np
# 数组分割
# hsplit:水平分割,不包含指定的列值
# vsplit:垂直分割,不包含指定的行值
def arr_split():
arr = np.arange(1, 25).reshape(4, 6)
print(arr)
print()
re_one = np.hsplit(arr, [2,3,4])
print(re_one)
print()
re_two = np.vsplit(arr, 2)
print(re_two)
if __name__ == "__main__":
arr_split()
10、resize()
函数名称 | 参数 | 说明 |
---|---|---|
resize(a, new_shape) | a:操作的数组 new_shape:返回的数组的形状,如果元素数量不够,重复数组元素来填充新的形状 | 返回指定形状的新数组 |
# import numpy as np
# resize():修改数组的形状,若数组中元素数量不足,这从原数组的开始位置添加到新数组中,
def arr_resize():
arr = (1, 2, 3, 4, 5)
arr = np.resize(arr, (2, 3))
print(arr)
if __name__ == "__main__":
arr_resize()
11、insert()
函数名称 | 参数 | 说明 |
---|---|---|
insert(arr, obj, values, axis) | arr:输入的数组 obj:表示索引值,在该索引值之前插入 values 值 values:要插入的值 axis:默认为 None,返回的是一维数组;当 axis =0 时,追加的值会被添加到行,而列数保持不变,若 axis=1 则与其恰好相反 | 沿规定的轴将元素值插入到指定的元素前 |
# import numpy as np
# insert():在指定位置插入元素
def arr_insert():
arr = np.arange(6).reshape(2, 3)
arr1 = np.insert(arr, 1, [6])
print(arr1)
print()
arr2 = np.insert(arr, 1, [6], axis=0)
print(arr2)
print()
arr3 = np.insert(arr, 1, [6], axis=1)
print(arr3)
if __name__ == "__main__":
arr_insert()
12、delete()
函数名称 | 参数 | 说明 |
---|---|---|
delete(arr, obj, axis) | arr:输入的数组 obj:表示索引值,在该索引值之前插入 values 值 axis:默认为 None,返回的是一维数组;当 axis =0 时,删除指定的行,若 axis=1 则与其恰好相反 | 删掉某个轴上的子数组,并返回删除后的新数组 |
# import numpy as np
# delete():删除指定位置的元素
# axis:指定删除的轴,0为行,1为列
def arr_delete():
arr = np.arange(6).reshape(2, 3)
print(arr)
print()
arr1 = np.delete(arr, 0)
print(arr1)
if __name__ == "__main__":
arr_delete()
13、argwhere()
返回数组中非 0 元素的索引,若是多维数组则返回行、列索引组成的索引坐标
#argwhere():返回数组中非0元素的索引
def argwhere():
arr = np.arange(10).reshape(2, 5)
print(np.argwhere(arr))
print()
if __name__ == "__main__":
argwhere()
14、unique()
# import numpy as np
# unique():返回数组中不重复的元素
# return_index:返回不重复元素的索引
# return_inverse:返回原数组中元素在unique后的对应下标
# return_counts:返回每个唯一元素在原数组中的出现次数
def arr_unique():
arr = np.array([1, 2,2, 3, 3, 3, 4, 4, 4, 4, 5, 6, 6, 6])
arr1, indices1 = np.unique(arr,return_index = True)
print(arr1)
print(indices1)
print()
arr2,indices2 = np.unique(arr, return_inverse = True)
print(arr2)
print(indices2)
print()
arr3,indices3 = np.unique(arr, return_counts = True)
print(arr3)
print(indices3)
print()
arr4 = np.array([[1,2],[2,3],[1,4],[5,6]])
arr4, indices4 = np.unique(arr4, return_index=True)
print(arr4)
if __name__ == "__main__":
arr_unique()
15、ptp()
# import numpy as np
# median():安装数值从大到小排列后,返回排列后数组元素的中位数
def arr_median():
arr = np.array([[1, 3, 5, 7], [2, 4, 6, 8]])
#不指定axis时,返回数组中所有元素排列后的中位数
print(np.median(arr))
print(np.median(arr, axis=0))
print(np.median(arr, axis=1))
if __name__ == "__main__":
arr_median()
16、mean()
# import numpy as np
# mean():返回数组中元素的算数平均值
def arr_mean():
arr = np.array([[1, 3, 5], [2, 4, 6]])
#不指定axis时,返回数组中所有元素的算数平均值
print(np.mean(arr))
#指定axis时,返回数组中指定轴上元素的平均值
#当axis=0时,返回每一列元素的平均值
print(np.mean(arr, axis=0))
#当axis=1时,返回每一行的元素平均值
print(np.mean(arr, axis=1))
if __name__ == "__main__":
arr_mean()
17、average()
加权平均值是将数组中各数值乘以相应的权数,然后再对权重值求总和,最后以权重的总和除以总的单位数(即因子个数);根据在数组中给出的权重,计算数组元素的加权平均值。该函数可以接受一个轴参数 axis,如果未指定,则数组被展开为一维数组。
加权平均值
其中 xi是数组中的元素,wi是对应的权重。
如果所有元素的权重之和等于1,则表示为数学中的期望值。
# import numpy as np
# average():返回数组中元素的加权平均值
def arr_average():
arr = np.arange(1, 5)
#指定权重时
weights = np.array([0.1, 0.2, 0.3, 0.4])
#返回加权平均值
print(np.average(arr,weights=weights))
if __name__ == "__main__":
arr_average()
18、var()
在 NumPy 中,计算方差时使用的是统计学中的方差公式,而不是概率论中的方差公式,主要是因为 NumPy 的设计目标是处理实际数据集,而不是概率分布。
np.var 函数默认计算的是总体方差(Population Variance),而不是样本方差(Sample Variance)。
总体方差:
对于一个总体数据集 X={x1,x2,…,xN},总体方差的计算公式为:
其中:
-
N是总体数据点的总数。
-
μ是总体的均值。
# import numpy as np
# var():返回数组中元素的方差
def arr_var():
arr = np.array([1, 2, 3, 4, 5])
#不指定ddof时,返回总体方差(默认不指定)
print(np.var(arr))
#指定ddof=1时,返回样本方差
print(np.var(arr, ddof=1))
#不指定ddof时,返回标准方差
print(np.std(arr))
#指定ddof=1时,返回标准方差
print(np.std(arr, ddof=1))
arr = np.array([[1, 2], [3, 4]])
#不指定axis时,返回数组中所有元素的方差
print(np.var(arr))
#指定axis时,返回数组中指定轴上元素的方差
#当axis=0时,返回每一列元素的方差
print(np.var(arr, axis=0))
#当axis=1时,返回每一行的元素方差
print(np.var(arr, axis=1))
if __name__ == "__main__":
arr_var()