python数组的操作

NumPy包(下) python笔记扩展 nditer 是 NumPy 中的一个强大的迭代器对象,用于高效地遍历多维数组。nditer 提供了多种选项和控制参数,使得数组的迭代更加灵活和高效。nditer 提供了多种控制参数,用于控制迭代的行为。1.order 参数order 参数用于指定数组的遍历顺序。默认情况下,nditer 按照 C 风格(行优先)遍历数组。# 创建一个二维数组​# 使用 C 风格遍历数组print(x)# 输出:# 1# 2# 3# 4# 5# 6​# 使用 Fortran 风格遍历数组。 阅读详情
AI摘要

本文围绕Python-NumPy库中数组操作展开,涵盖数组变维(reshape、flat等)、转置、升维和降维、连接与分割数组、矩阵运算(np.dot、np.matmul等)、元素增删改查(resize、append等)以及统计函数(amin、amax等)的使用方法和案例。

续 python-NumPy库  内容。

1、数组变维

函数名称函数介绍
reshape在不改变数组元素的条件下,修改数组的形状
flat属性返回是一个迭代器,可以用 for 循环遍历其中的每一个元素
flatten以一维数组的形式返回一份数组的副本,对副本的操作不会影响到原数组
ravel返回一个连续的扁平数组(即展开的一维数组),与 flatten不同,它返回的是数组视图(修改视图会影响原数组)

1.1 reshape

reshape() 函数允许你在不改变数组数据的情况下,改变数组的维度。

reshape() 返回的是一个新的数组,原数组的形状不会被修改。reshape() 可以用于多维数组,例如将一个一维数组重塑为二维数组。

但是,reshape后产生的新数组是原数组的一个视图,即它与原数组共享相同的数据,但可以有不同的形状或维度,且对视图的修改会直接影响原数组。

元素总数必须匹配:新形状中的元素总数必须与原数组中的元素总数相同。

例如,一个长度为6的一维数组可以被重塑为 (2, 3) 或 (3, 2),表示原数组被重塑为2行3列或3行2列的数组,但不能被重塑为 (2, 2)。

#reshape  ,改变数组形状
a = np.array([[1, 2, 3], [4, 5, 6]])
b = a.reshape(3, 2)
# print("b=",b)

-1 作为占位符:你可以使用 -1 作为占位符,让 numpy 自动计算某个维度的大小。

例如:

import numpy as np
a = np.array([1,2,3,4,5,6])
b = a.reshape((3,-1))
print(b)

 reshape() 还可以将一维数组重塑为三维数组:

import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])

# 使用 reshape() 函数将其转换为三维数组
arr1 = arr.reshape((2, 3, 2))

print(arr1)

1.2 flat

返回一个一维迭代器,用于遍历数组中的所有元素。无论数组的维度如何,ndarray.flat属性都会将数组视为一个扁平化的一维数组,按行优先的顺序遍历所有元素。

语法: ndarray.flat

import numpy as np

a = np.array([1, 2, 3])
print(a.flat[0])
print(a.flat[1])
print(a.flat[2])


def flat_test():
    array_one = np.arange(4).reshape(2,2)
    print("原数组元素:")
    for i in array_one:
        print(i,end=" ")
    print()
    print("使用flat属性,遍历数组:")
    for i in array_one.flat:
        print(i,end=" ")
flat_test()

1.3 flatten()

用于将多维数组转换为一维数组。flatten() 返回的是原数组的一个拷贝,因此对返回的数组进行修改不会影响原数组。

语法:ndarray.flatten(order='C')

参数

order: 指定数组的展开顺序。

  • 'C':按行优先顺序展开(默认)。

  • 'F':按列优先顺序展开。

  • 'A':如果原数组是 Fortran 连续的,则按列优先顺序展开;否则按行优先顺序展开。

  • 'K':按元素在内存中的顺序展开。

import numpy as np

# 创建一个二维数组
arr = np.array([[1, 2, 3], [4, 5, 6]])

# 使用 flatten 方法按行优先顺序展开

arrC= arr.flatten(order='C') #按行优先顺序展开
arrF= arr.flatten(order='F') #按列优先顺序展开
arrA= arr.flatten(order='A') #按默认顺序展开   

# 输出:

print(arrC) 
print(arrF)
print(arrA)

1.4 ravel()

用于将多维数组转换为一维数组。与 flatten() 不同,ravel() 返回的是原数组的一个视图(view),而不是副本。因此,对返回的数组进行修改会影响原数组。

语法:ndarray.ravel()

参数

order: 指定数组的展开顺序。

  • 'C':按行优先顺序展开(默认)。

  • 'F':按列优先顺序展开。

  • 'A':如果原数组是 Fortran 连续的,则按列优先顺序展开;否则按行优先顺序展开。

  • 'K':按元素在内存中的顺序展开。

import numpy as np

# 创建一个二维数组
arr = np.array([[1, 2, 3], [4, 5, 6]])

# 使用 ravel 方法按行优先顺序展开
ravel_arr = arr.ravel()

print(ravel_arr)
# 输出:
# [1 2 3 4 5 6]

ravel_arr[-1] = 7
print(arr)
# 输出:
# [[1 2 3]
#  [4 5 7]]

2、数组转置

函数名称说明
transpose将数组的维度值进行对换,比如二维数组维度(2,4)使用该方法后为(4,2)
ndarray.T与 transpose 方法相同

案例:

import numpy as np

def fun1():
    arr = np.arange(12).reshape(3, 4)
    print("原数组:")
    print(arr)
    print("使用transpose()函数后的数组:")
    print(np.transpose(arr))


def fun2():
    arr = np.arange(12).reshape(3, 4)
    print("原数组:")
    print(arr)
    print("数组转置:")
    print(arr.T)
fun1()
fun2()

3、升维和降维

多维数组(也称为 ndarray)的维度(或轴)是从外向内编号的。这意味着最外层的维度是轴0,然后是轴1,依此类推。

函数名称参数说明
expand_dims(arr, axis)arr:输入数组 axis:新轴插入的位置在指定位置插入新的轴(相对于结果数组而言),从而扩展数组的维度
squeeze(arr, axis)arr:输入数的组 axis:取值为整数或整数元组,用于指定需要删除的维度所在轴,指定的维度值必须为 1 ,否则将会报错,若为 None,则删除数组维度中所有为 1 的项删除数组中维度为 1 的项

案例1:增加数组维度

import numpy as np

# 创建一个一维数组
a = np.array([1, 2, 3])
print(a.shape)  # 输出: (3,)

# 在第 0 维插入新维度
b = np.expand_dims(a, axis=0)
print(b)
# 输出:
# [[1 2 3]]
print(b.shape)  # 输出: (1, 3)

# 在第 1 维插入新维度
c = np.expand_dims(a, axis=1)
print(c)
# 输出:
# [[1]
#  [2]
#  [3]]
print(c.shape)  # 输出: (3, 1)

 降维

import numpy as np

# 创建一个数组
c = np.array([[[1, 2, 3]]])
print(c.shape)  # 输出: (1, 1, 3)

# 移除第 0 维
d = np.squeeze(c, axis=0)
print(d)
# 输出:
# [[1 2 3]]
print(d.shape)  # 输出: (1, 3)

# 移除第 1 维
e = np.squeeze(c, axis=1)
print(e)
# 输出:
# [[1 2 3]]
print(e.shape)  # 输出: (1, 3)

# 移除第 2 维
f = np.squeeze(c, axis=2)
print(f)
# 输出:
# ValueError: cannot select an axis to squeeze out which has size not equal to one
print(f.shape)
import numpy as np

# 创建一个数组
g = np.array([[[1, 2, 3]], [[4, 5, 6]]])
print(g.shape)  # 输出: (2, 1, 3)

# 移除第 1 维
h = np.squeeze(g, axis=1)
print(h)
# 输出:
# [[1 2 3]
#  [4 5 6]]
print(h.shape)  # 输出: (2, 3)

4 连接数组

函数名称参数说明
hstack(tup)tup:可以是元组,列表,或者numpy数组,返回结果为numpy的数组按水平顺序堆叠序列中数组(列方向)
vstack(tup)tup:可以是元组,列表,或者numpy数组,返回结果为numpy的数组按垂直方向堆叠序列中数组(行方向)

hstack函数要求堆叠的数组在垂直方向(行)上具有相同的形状。如果行数不一致,hstack() 将无法执行,并会抛出 ValueError 异常。

vstack() 要求堆叠的数组在水平方向(列)上具有相同的形状。如果列数不一致,将无法执行堆叠操作。

vstack() 和 hstack() 要求堆叠的数组在某些维度上具有相同的形状。如果维度不一致,将无法执行堆叠操作。

案例:hstack

import numpy as np

# 创建两个形状不同的数组,行数一致
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5], [6]])
print(arr1.shape) 	# (2, 2)
print(arr2.shape)	# (2, 1)

# 使用 hstack 水平堆叠数组
result = np.hstack((arr1, arr2))
print(result)
# 输出:
# [[1 2 5]
#  [3 4 6]]
# 创建两个形状不同的数组,行数不一致
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5], [6], [7]])
print(arr1.shape)	# (2, 2)
print(arr2.shape)	# (3, 1)

# 使用 hstack 水平堆叠数组
result = np.hstack((arr1, arr2))

print(result)

# ValueError: all the input array dimensions except for the concatenation axis must match exactly
# 第一个数组在第0维有2个元素,而第二个数组在第0维有3个元素,因此无法直接连接。

vstack:       

import numpy as np 

 # 创建两个一维数组
 arr1 = np.array([1, 2, 3])
 arr2 = np.array([4, 5, 6])
 ​
 # 使用 vstack 垂直堆叠数组
 result = np.vstack((arr1, arr2))
 ​
 print(result)
 # 输出:
 # [[1 2 3]
 #  [4 5 6]]
 import numpy as np
 # 创建两个形状不同的数组,列数一致
 arr1 = np.array([[1, 2, 3], [4, 5, 6]])
 arr2 = np.array([[7, 8, 9], [10, 11, 12]])
 ​
 # 使用 vstack 垂直堆叠数组
 result = np.vstack((arr1, arr2))
 ​
 print(result)
 # 创建两个形状不同的数组,列数不一致
 arr1 = np.array([[1, 2], [3, 4]])
 arr2 = np.array([[5, 6, 7], [8, 9, 10]])
 ​
 # 使用 vstack 垂直堆叠数组
 result = np.vstack((arr1, arr2))
 ​
 print(result)
 # ValueError: all the input array dimensions except for the concatenation axis must match exactly
 # 第一个数组在第1维有2个元素,而第二个数组在第1维有3个元素,因此无法直接连接。

 

 

5 分割数组

函数名称参数说明
hsplit(ary, indices_or_sections)ary:原数组 indices_or_sections:按列分割的索引位置将一个数组水平分割为多个子数组(按列)
vsplit(ary, indices_or_sections)ary:原数组 indices_or_sections:按行分割的索引位置将一个数组垂直分割为多个子数组(按行)
import numpy as np

'''
    hsplit 函数:
        1、将一个数组水平分割为多个子数组(按列)
        2、ary:原数组
        3、indices_or_sections:按列分割的索引位置
'''
# 创建一个二维数组
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])

# 使用 np.hsplit 将数组分割成三个子数组
# 分割点在索引1和3处,这意味着:
# 第一个子数组将包含从第0列到索引1(不包括索引1)的列,即第0列。
# 第二个子数组将包含从索引1(包括索引1)到索引3(不包括索引3)的列,即第1列到第2列。
# 第三个子数组将包含从索引3(包括索引3)到末尾的列,即第3列。
result = np.hsplit(arr, [1, 3])

# 查看结果
print("第一个子数组:\n", result[0])  # 输出包含第0列的子数组
print("第二个子数组:\n", result[1])  # 输出包含第1列和第2列的子数组
print("第三个子数组:\n", result[2])  # 输出包含第3列的子数组


'''
    vsplit 函数:
        1、将一个数组垂直分割为多个子数组(按行)
        2、ary:原数组
        3、indices_or_sections:按列分割的索引位置
'''
array_one = np.arange(12).reshape(2,6)
print('array_one 原数组:\n', array_one)
array_two = np.vsplit(array_one,[1])
print('vsplit 之后的数组:\n', array_two)

6 、矩阵运算

np.dot

是一个通用的点积函数,适用于多种维度的数组。

  • 对于二维数组(矩阵),np.dot 等价于矩阵乘法。

  • 对于一维数组(向量),np.dot 计算的是向量的点积(内积)。

案例1:矩阵运算

import numpy as np

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])

result = np.dot(a, b)
print(result)

案例2:向量点积

计算公式为:a\cdot b=a_{1}b_{1}+a_{2}b_{2}+⋯+a_{n}b_{n}

 a = np.array([1, 2, 3])
 b = np.array([4, 5, 6])
 ​
 result = np.dot(a, b)
 print(result)

np.matmul

是专门用于矩阵乘法的函数,适用于二维及更高维度的数组。

案例:矩阵相乘

 a = np.array([[1, 2], [3, 4]])
 b = np.array([[5, 6], [7, 8]])
 ​
 result = np.matmul(a, b)
 print(result)

np.dot是通用点积函数,np.matmul专门用于矩阵运算,性能要好于np.dot

np.linalg.det

计算一个方阵(行数和列数相等的矩阵)的行列式。

案例:

 a = np.array([[1, 2], [3, 4]],dtype=int)
 # 计算行列式
 det_a = np.linalg.det(a)
 print(det_a)
 ​
 #输出:
 -2.0000000000000004

结果不是-2,这是由于浮点数的二进制表示和计算过程中的舍入误差导致的。可以通过四舍五入来近似表示:

 det_a = np.round(np.linalg.det(a))

7、数组元素的增删改查

7.1 resize

函数名称参数说明
resize(a, new_shape)a:操作的数组 new_shape:返回的数组的形状,如果元素数量不够,重复数组元素来填充新的形状返回指定形状的新数组

案例:

 import numpy as np
 ​
 array_one = np.arange(6).reshape(2, 3)
 print(array_one)
 print('resize 后数组:\n', np.resize(array_one, (3, 4)))
 ​
 # 输出:
 # [[0 1 2 3]
 #  [4 5 0 1]
 #  [2 3 4 5]]

最后一行代码将数组形状修改为(3, 4),原数组的元素数量不够,则重复原数组的元素填充。

7.2 append

函数名称参数说明
append(arr, values, axis=None)arr:输入的数组 values:向 arr 数组中添加的值,需要和 arr 数组的形状保持一致 axis:默认为 None,返回的是一维数组;当 axis =0 时,追加的值会被添加到行,而列数保持不变,若 axis=1 则与其恰好相反在数组的末尾添加值,返回一个一维数组

案例:

 
'''
     append(arr, values, axis=None) 函数:
         1、将元素值添加到数组的末尾,返回一个一维数组
         2、arr:输入的数组
         3、values:向 arr 数组中添加的值,需要和 arr 数组的形状保持一致
         4、axis:默认为 None,返回的是一维数组;当 axis =0 时,追加的值会被添加到行,而列数保持不变,若 axis=1 则与其恰好相反
 '''
 def append_test():
     array_one = np.arange(6).reshape(2,3)
     print('原数组:\n', array_one)
     array_two = np.append(array_one,[[1,1,1],[1,1,1]],axis=None)
     print('append 后数组 axis=None:\n', array_two)
     array_three = np.append(array_one, [[1, 1, 1], [1, 1, 1]], axis=0)
     print('append 后数组 axis=0:\n', array_three)
     array_three = np.append(array_one, [[1, 1, 1], [1, 1, 1]], axis=1)
     print('append 后数组 axis=1:\n', array_three)

7.3 insert

函数名称参数说明
insert(arr, obj, values, axis)arr:输入的数组 obj:表示索引值,在该索引值之前插入 values 值 values:要插入的值 axis:默认为 None,返回的是一维数组;当 axis =0 时,追加的值会被添加到行,而列数保持不变,若 axis=1 则与其恰好相反沿规定的轴将元素值插入到指定的元素前

案例:

 
import numpy as np
 ​
 def insert_test():
     array_one = np.arange(6).reshape(2,3)
     print('原数组:\n', array_one)
     array_two = np.insert(array_one, 1, [6],axis=None)
     print('insert 后数组 axis=None:\n', array_two)
     # 在索引为1的行插入[6],并自动广播
     array_three = np.insert(array_one,1, [6], axis=0)
     print('insert 后数组 axis=0:\n', array_three)
     # 在索引为1的列插入[6],并自动广播
     array_three = np.insert(array_one, 1, [6], axis=1)
     print('insert 后数组 axis=1:\n', array_three)
     
     array_three = np.insert(array_one, 1, [6,7], axis=1)
     print('insert 后数组 axis=1:\n', array_three)
     
     # 在列上插入数组的形状和原数组列的形状不一致
     # ValueError: could not broadcast input array from shape (3,1) into shape (2,1)
     array_three = np.insert(array_one, 1, [6,7,8], axis=1)
     print('insert 后数组 axis=1:\n', array_three)
如果obj为-1,表示插入在倒数第一个元素之前,不是在最后一列。

 array_three = np.insert(array_one, -1, [6,7], axis=1)
 print('insert 后数组 axis=1:\n', array_three)
 ​
 #输出:
  [[0 1 6 2]
  [3 4 7 5]]

7.4 delete

函数名称参数说明
delete(arr, obj, axis)arr:输入的数组 obj:表示索引值,要删除数据的索引 axis:默认为 None,返回的是一维数组;当 axis =0 时,删除指定的行,若 axis=1 则与其恰好相反删掉某个轴上的子数组,并返回删除后的新数组

案例:

一维数组:

 
import numpy as np
 ​
 # 创建一个 NumPy 数组
 arr = np.array([1, 2, 3, 4, 5, 6])
 ​
 # 删除索引为 2 和 4 的元素
 new_arr = np.delete(arr, [2, 4])
 ​
 print(new_arr)

二维数组:

 
import numpy as np
 ​
 ​
 def delete_test():
     array_one = np.arange(6).reshape(2,3)
     print('原数组:\n', array_one)
     array_two = np.delete(array_one,1,axis=None)
     print('delete 后数组 axis=None:\n', array_two)
     array_three = np.delete(array_one,1, axis=0)
     print('delete 后数组 axis=0:\n', array_three)
     array_three = np.delete(array_one, 1, axis=1)
     print('delete 后数组 axis=1:\n', array_three)

7.5 argwhere

返回数组中非 0 元素的索引,若是多维数组则返回行、列索引组成的索引坐标

案例:

 
import numpy as np
 ​
 '''
     argwhere(a) 函数:
         1、返回数组中非 0 元素的索引,若是多维数组则返回行、列索引组成的索引坐标
 '''
 def argwhere_test():
     array_one = np.arange(6).reshape(2,3)
     print('原数组:\n', array_one)
     print('argwhere 返回非0元素索引:\n', np.argwhere(array_one))
     print('argwhere 返回所有大于 1 的元素索引:\n', np.argwhere(array_one > 1))

7.6 unique

函数名称参数说明
unique(ar, return_index=False, return_inverse=False, return_counts=False, axis=None)ar:输入的数组 return_index:如果为 True,则返回新数组元素在原数组中的位置(索引) return_inverse:如果为 True,则返回原数组元素在新数组中的位置(逆索引) return_counts:如果为 True,则返回去重后的数组元素在原数组中出现的次数删掉某个轴上的子数组,并返回删除后的新数组

案例1:返回唯一元素的索引

 
import numpy as np
 ​
 # 创建一个 NumPy 数组
 arr = np.array([1, 2, 2, 3, 4, 4, 5])
 unique_elements, indices = np.unique(arr, return_index=True)
 print(unique_elements)
 print(indices)

案例2:返回唯一元素及其逆索引

 mport numpy as np
 ​
 # 创建一个一维数组
 arr = np.array([1, 2, 2, 3, 3, 3, 4, 4, 4, 4])
 ​
 # 使用 np.unique 查找唯一元素及其逆索引
 unique_elements, inverse_indices = np.unique(arr, return_inverse=True)
 ​
 print(unique_elements)
 # 输出:
 # [1 2 3 4]
 ​
 print(inverse_indices)
 # 输出:
 # [0 1 1 2 2 2 3 3 3 3]
 # 逆索引数组,表示原始数组中的每个元素在唯一元素数组中的位置。

案例3:返回唯一元素的计数

import numpy as np
 ​
 # 创建一个一维数组
 arr = np.array([1, 2, 2, 3, 3, 3, 4, 4, 4, 4])
 ​
 # 使用 np.unique 查找唯一元素及其计数
 unique_elements, counts = np.unique(arr, return_counts=True)
 ​
 print(unique_elements)
 # 输出:
 # [1 2 3 4]
 ​
 print(counts)
 # 输出:
 # [1 2 3 4]

对于多维数组,unique 函数同样适用。默认情况下,unique 函数会将多维数组展平为一维数组,然后查找唯一元素。

 arr = np.array([[1, 2], [2, 3], [1, 2]])
 ​
 # 查找数组中的唯一元素
 unique_elements = np.unique(arr)
 print(unique_elements)

 

 

8、统计函数

8.1 amin() 和 amax()

  • 计算数组沿指定轴的最小值与最大值,并以数组形式返回

  • 对于二维数组来说,axis=1 表示沿着水平方向,axis=0 表示沿着垂直方向

案例:

 '''
     numpy.amin() 和 numpy.amax() 函数:
         1、计算数组沿指定轴的最小值与最大值,并以数组形式返回
         2、对于二维数组来说,axis=1 表示沿着水平方向,axis=0 表示沿着垂直方向
 '''
 def amin_amax_test():
     array_one = np.array([[1,23,4,5,6],[1,2,333,4,5]])
     print('原数组元素:\n', array_one)
     print('原数组水平方向最小值:\n', np.amin(array_one, axis=1))
     print('原数组水平方向最大值:\n', np.amax(array_one, axis=1))
     print('原数组垂直方向最小值:\n', np.amin(array_one, axis=0))
     print('原数组垂直方向最大值:\n', np.amax(array_one, axis=0))
     输出:
 原数组元素:
  [[  1  23   4   5   6]
  [  1   2 333   4   5]]
 原数组水平方向最小值:
  [1 1]
 原数组水平方向最大值:
  [ 23 333]
 原数组垂直方向最小值:
  [1 2 4 4 5]
 原数组垂直方向最大值:
  [  1  23 333   5   6]

按1轴求最小值,表示在最内层轴中(每列中)分别找最小值;按1轴求最小值表示在最外层轴中(所有行中按列)找最小值。求最大值类似。

8.2 ptp()

  • 计算数组元素中最值之差值,即最大值 - 最小值

  • 对于二维数组来说,axis=1 表示沿着水平方向,axis=0 表示沿着垂直方向

 # 创建一个二维数组
 arr = np.array([[1, 2, 3], [4, 5, 6]])
 ​
 # 使用 np.ptp 计算峰峰值
 ptp_value = np.ptp(arr)
 ​
 print(ptp_value)
 # 输出:
 # 5
 ​
 # 使用 np.ptp 按行计算峰峰值
 ptp_values_row = np.ptp(arr, axis=1)
 ​
 # 使用 np.ptp 按列计算峰峰值
 ptp_values_col = np.ptp(arr, axis=0)
 ​
 print(ptp_values_row)
 # 输出:
 # [2 2]
 ​
 print(ptp_values_col)
 # 输出:
 # [3 3 3]

8.3 median()

用于计算中位数,中位数是指将数组中的数据按从小到大的顺序排列后,位于中间位置的值。如果数组的长度是偶数,则中位数是中间两个数的平均值。

 # 创建一个二维数组
 arr = np.array([[1, 2, 3], [4, 5, 6]])
 ​
 # 使用 np.median 计算中位数
 median_value = np.median(arr,axis=None)
 ​
 print(median_value)
 # 输出:
 # 3.5
 ​
 # 使用 np.median 按行计算中位数
 median_values_row = np.median(arr, axis=1)
 ​
 # 使用 np.median 按列计算中位数
 median_values_col = np.median(arr, axis=0)
 ​
 print(median_values_row)
 # 输出:
 # [2. 5.]
 ​
 print(median_values_col)
 # 输出:
 # [2.5 3.5 4.5]

8.4 mean()

沿指定的轴,计算数组中元素的算术平均值(即元素之总和除以元素数量)

 
# 创建一个一维数组
 arr = np.array([1, 2, 3, 4, 5])
 ​
 # 使用 np.mean 计算平均值
 mean_value = np.mean(arr)
 ​
 print(mean_value)
 # 输出:
 # 3.0
 ​
 ​
 # 创建一个二维数组
 arr = np.array([[1, 2, 3], [4, 5, 6]])
 ​
 # 使用 np.mean 计算平均值
 mean_value = np.mean(arr)
 ​
 print(mean_value)
 # 输出:
 # 3.5
 ​
 ​
 # 使用 np.mean 按行计算平均值
 mean_values_row = np.mean(arr, axis=1)
 ​
 # 使用 np.mean 按列计算平均值
 mean_values_col = np.mean(arr, axis=0)
 ​
 print(mean_values_row)
 # 输出:
 # [2. 5.]
 ​
 print(mean_values_col)
 # 输出:
 # [2.5 3.5 4.5]

8.5 average()

加权平均值是将数组中各数值乘以相应的权数,然后再对权重值求总和,最后以权重的总和除以总的单位数(即因子个数);根据在数组中给出的权重,计算数组元素的加权平均值。该函数可以接受一个轴参数 axis,如果未指定,则数组被展开为一维数组。


其中 xi是数组中的元素,wi是对应的权重。

如果所有元素的权重之和等于1,则表示为数学中的期望值。

 # 创建一个一维数组
     arr = np.array([1, 2, 3, 4, 5])
 ​
     # 创建权重数组
     weights = np.array([0.1, 0.2, 0.3, 0.2, 0.2])
 ​
     # 使用 np.average 计算加权平均值
     average_value = np.average(arr, weights=weights)
 ​
     print(average_value)
     # 输出:
     # 3.2

8.6 var()

在 NumPy 中,计算方差时使用的是统计学中的方差公式,而不是概率论中的方差公式,主要是因为 NumPy 的设计目标是处理实际数据集,而不是概率分布。

np.var 函数默认计算的是总体方差(Population Variance),而不是样本方差(Sample Variance)。

总体方差:

对于一个总体数据集 X={x1,x2,…,xN},总体方差的计算公式为:

其中:

  • N是总体数据点的总数。

  • μ是总体的均值。

 # 创建一个数组
 arr = np.array([1, 2, 3, 4, 5])
 ​
 # 计算方差
 variance = np.var(arr)
 ​
 print(variance)
 ​
 #输出:2

样本方差:

对于一个样本数据集 X={x1,x2,…,xn},样本方差 的计算公式为:

其中:

  • n是样本数据点的总数。

  • xˉ是样本的均值。

在样本数据中,样本均值的估计会引入一定的偏差。通过使用 n−1作为分母,可以校正这种偏差,得到更准确的总体方差估计。

 # 创建一个数组
 arr = np.array([1, 2, 3, 4, 5])
 ​
 # 计算方差
 variance = np.var(arr, ddof=1)
 ​
 print(variance)
 ​
 #输出:2.5

8.7 std()

标准差是方差的算术平方根,用来描述一组数据平均值的分散程度。若一组数据的标准差较大,说明大部分的数值和其平均值之间差异较大;若标准差较小,则代表这组数值比较接近平均值

 # 创建一个数组
 arr = np.array([1, 2, 3, 4, 5])
 ​
 # 计算标准差
 std_dev = np.std(arr)
 ​
 print(std_dev)
 ​
 # 输出:1.4142135623730951

pytorch入门(五):什么是广播运算? 什么是广播运算?1、概念2、规则3、应用4、转化5、向量运算6、升维7、降维8、随机数种子9、正态分布随机数10、随机整数11、函数12、求和13、点乘 torch与numpy有不少相似之处,可看作gpu版本的numpy 代码 import numpy as np import torch 1、概念 arange print(np.arange(6)) print(torch.arange(6)) 结果 [0 1 2 3 4 5] tensor([0, 1, 2, 3, 4, 5]) 2、规则 改变形 阅读详情

相关推荐

Python 数组操作指南:使用示例和方法解析

本文深入介绍了如何在 Python 中使用数组,并提供了详细的示例和方法解析。从创建数组、访问元素到数组操作(如更改值、添加、删除),我们逐步探索了数组的各个方面。无论你是初学者还是有经验的开发者,这篇指南都将帮助你深入理解 Python 数组的核心概念和操作方法。

wly476923083的博客 537

第一章——数组基础(概念篇python版)

介绍了数组这种数据结构,并用python语言自定义了数组对象和对应的增删改查方法

qq_40467656的博客 8027

掌握Python数组操作的精髓

本文深入探讨了Python中数组的基本操作,包括初始化、长度获取、元素添加、用户输入处理以及元素的插入、删除和移除。通过实例代码的展示,我们将理解如何在Python中有效地使用数组,并掌握数组操作的技巧。

weixin_35754676的博客 253

python数组的基本操作

三.元素的插入(要插入的元素的索引依次向后,会导致尾部元素的丢失),先偏移后面的元素(二选一)七.扩容数组(重新建立一个更大的数组,然后把原数组元素依次拷贝到新数组)2.随机访问(会访问不同的元素)1.指定访问(通过索引(下标))四.删除元素(向前位移)

weixin_63328814的博客 1519

TI C2000 DSP CLA实战:用F28069的协处理器实现ADC采样与PWM相位实时联动控制

本文详细介绍了如何利用TI C2000系列DSP的CLA协处理器在TMS320F28069上实现ADC采样与PWM相位的实时联动控制。通过CLA的零周期上下文切换和硬件级任务触发特性,显著提升了电机控制和数字电源应用的实时性能,特别适用于需要亚微秒级响应的场景。

weixin_30932215的博客 3968

educoder数字逻辑实训:寄存器设计与应用(Logisim)

第1关:基本寄存器的设计 任务描述 本关任务:在Logisim中,构建由4个D触发器构成的4位基本寄存器,要求上升沿触发,具有异步复位功能。 第2关:移位寄存器的设计 任务描述 本关任务:在Logisim中,构建由4个D触发器构成的4位右移移位寄存器,要求上升沿触发,具有异步复位功能。 第3关:循环移位寄存器的设计 任务描述 本关任务:在Logisim中,构建由4个D触发器构成的4位循环右移移位寄存器,要求上升沿触发,具有异步复位功能以及并行数据同步加载功能。 第4关:并行..

qq_52209002的博客 1万+

python数组操作

python定义一个数组很简单,直接 arr = [];就可以了,arr就被定义成了一个空数组,只不过这个数组是没有任何值的,我们接下来给arr这个数组赋值看看,arr = [ ‘今天’, ‘双11’, ‘你剁手了吗’];现在arr数组已经被赋值了三个元素,其实这一步把数组定义和赋值都完成了,在开发中通常也是定义和赋值一步到位的。

weixin_68789096的博客 1593

FreeRTOS:卡在configASSERT( ( pxQueue ) )问题的解决

FreeRTOS卡在configASSERT( ( pxQueue ) )问题的解决

qq_42007164的博客 9564

Python数组操作将一维数组变成二维数组

一、问题 我们在进行数组操作的时候会遇到将一个低维的数组变成一个高维的素数组 二、解决 第一种方法 基本思路就是将低维数组进行等长的循环,在第一次为零的情况下,需要添加一个[]数组,原因是将它的基本框架搭建起来 records = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] result = [] for y in range(0, 4): for x in range(0, 3): if x == 0: result.ap

qq_40185847的博客 5万+

Jev模型入门:从API接入到本地部署的完整实践指南

大模型的应用方式正从单一聊天窗口转向复杂的自动化工作流,而推理模型因具备指令跟随与结构化输出能力,成为构建Agent和数据处理管线的关键组件。Jev作为面向通用场景的推理模型,不仅提供了OpenAI兼容的API接口,还支持本地量化部署,兼顾隐私、可控性与长期成本。本文从模型定位出发,明确Jev与基座模型的差异,随后介绍密钥管理、API调用、参数调优,并深入演示基于Ollama与llama.cpp的本地部署流程,包括GGUF模型文件与chat template的匹配要点。针对实践中的常见问题,如密钥泄露、ma

weixin_29057237的博客 359

Python 爬虫实战:爬取万方数据文献信息

本文介绍了基于Python爬虫技术合规获取万方数据文献信息的方法。通过分析万方数据的请求机制与反爬策略,采用requests库结合Session维持合法会话,实现了文献标题、摘要、作者等核心元数据的提取。文章详细讲解了Token验证、动态请求构造、JSON数据解析等关键技术,并提供了完整可运行代码。同时强调严格遵守《万方数据知识服务平台用户协议》,控制请求频率,仅限学术研究使用。该方案为万方数据文献信息获取提供了标准化解决方案,支持数据清洗、结构化存储及后续分析应用。

2503_91057718的博客 2138

Python3数组操作总结

Python3删除、分割数组内的指定元素 删除数组内的指定元素 例如:删除数组a = [0,2,5,8,6,0,4,0]中的所有的0元素(当然元素也可以是字符串)可以使用一下代码进行: a = [0,2,5,8,6,0,4,0] b = filter(lambda x: x != 0, a) print(list(b)) #结果如下[2,5,8,6,4] 对数组内的指定元素进行分割处理 ...

让技术没有门槛 5290

人群仿真软件:Pathfinder_(14).与其他软件的集成与互操作

在人群仿真软件的二次开发中,与其他软件的集成和互操作是非常重要的。通过数据导入导出、接口调用和脚本编写,可以显著提升仿真的准确性和实用性。Pathfinder提供了多种数据格式的支持和丰富的API,使得与其他软件的集成变得简单高效。无论是建筑模型的导入、仿真结果的导出,还是实时数据的交换,Pathfinder都能满足用户的需求。

kkchenjj的博客 1017

python常见数组操作

当然,Python中的数组操作可以非常复杂和强大,特别是当你使用NumPy、SciPy、Pandas等库时。NumPy和SciPy提供了大量的线性代数功能,包括矩阵分解、求解线性方程组等。SciPy提供了信号处理模块,可以进行滤波、卷积等操作。NumPy允许你使用复杂的索引和切片操作来处理多维数组。NumPy和SciPy提供了傅里叶变换和逆变换的功能.NumPy会“广播”较小的数组以匹配较大数组的形状。NumPy可以生成各种分布的随机数.

qq_41359358的博客 743

手把手教你实现RK3588的Secure Boot:密钥烧录与镜像签名验证

摘要:本文详细介绍了瑞芯微RK3588平台下SecureBoot的密钥烧录与镜像签名验证实现方法。首先阐述了SecureBoot的工作原理、安全优势及其在RK3588智能安防、工业控制等场景中的重要作用。接着分步骤指导了硬件准备、软件工具配置、密钥对生成等准备工作,并详细说明了进入烧录模式、工具选择配置、密钥烧录执行等关键操作流程。文章还解析了镜像签名生成与验证机制,包括启动验证流程和常见故障处理方法。最后对SecureBoot在RK3588设备中的未来应用进行了展望,强调其与TrustZone等安全技术融

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 2045

到底什么是指令集?什么是微架构?他们是什么关系?

指令集、处理器架构、芯片厂商、ARM、x86,其间关系还在迷糊吗?一文迅速理清!!

车载系统攻城狮 7813

Python常用的数组操作

1. 在python学习的过程中,经常要创建数组,对数组里面的元素进行操作,所以我们需要掌握python中对于数组操作的基本语法 2. 下面是一些常用的数组创建、赋值的一些语法: 其中需要使用到python中的numpy包,我们使用对数组操作的相关函数需要导入这个包 import numpy as np numpy中的array方法(构造器方法): numpy.array(ob...

二哈 4664

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

python数组列表操作简记

本文主要说明了python列表与数组的增加删除元素的几种方法,以及列表与数组如何进行排序,最后以二维数组列表为例说明了如何进行维度转换,并给出了相应的python代码实现。

weixin_46846685的博客 1903

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

python的二维数组操作_Python的二维数组操作

二维数组的初始化最近刷题碰到需要用二维数组做的题目,所以就遇到了这样的坑。n = 3m = 3dp = [[0] * n] * mdp[0][1] = 1print dp# output:# [[0, 1, 0], [0, 1, 0], [0, 1, 0]]上面这段代码是想修改二维数组第1行第2列的数,可是居然三列都改了……matrix = [array] * 3……也就是说matrix = [a...

weixin_39837607的博客 1857

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Python数组的操作

数组操作 1.1更改形状 在对数组进行操作时,为了满足格式和计算的要求通常会改变形状 数组的维度可表示为:numpy.ndarray.shape 元组的长度即维度数目,即ndim属性(秩) 通过修改shape属性来改变数组的形状 import numpy as np x=np.array([1,2,3,4,5,6]) print(x.shape)#(6,) x.shape=[3,2] print(x) # [[1 2] # [3 4] # [5 6]] numpy.ndarray.flat将数组转换

yizhiyangchichi的博客 387

python 数组基础操作

# 定义空数组 arr = [] for i in range(8): arr.append(i) print(arr) # 追加元素 arr.append(5) print(arr) # 获取某元素在数组中的出现次数 print('5在该数组中出现:' + str(arr.count(5)) + '次') # 移除元素 arr.remove(5) print(arr) print...

Dream丶Boy 269

Python 数组操作技巧总结[持续更新]

开始接触数组进行编程的时候,很多数组操作用内置的函数就可以完成。但是工作中慢慢发现数组的操作很多,并不只是加减和转置就可以很好解决的。因此开了这个博客,记录用到的一些命令。根据工作使用慢慢更新,也希望能帮助到一些朋友。 两个数组之间的操作 (1)一个二维数组与一维数组的运算。 有时候希望对二维数组中,没一行,或者每一列加减一个一维数组。这时候一维数组的长度与二维数组列/行相等。可以进

baidu_36316735的博客 5223

Python——二维数组遍历操作

一、遍历数组(操作Value) 1.使用二维列表遍历二维数组 python 创建List二维列表 lists = [[] for i in range(3)] # 创建的是多行三列的二维列表 for i in range(3): lists[0].append(i) for i in range(5): lists[1].append(i) for i in ran...

YBAdiam的博客 2万+

python数组列表操作简记二

本文主要说明了如何将列表配对组成新列表或转换为字典,numpy数组的加减乘除运算,以及多维数组的切片读取的规律,和数组的约分和复制注意事项,并给出了相应的实现代码。

weixin_46846685的博客 1895

python切片数组_[python随笔]python数组切片操作

python的数组切片操作很强大,但有些细节老是忘,故写一点东西记录下来。在python&numpy中切片(slice)对于一维数组来说,python的list和numpy的array切片操作都是相似的。无非记住arr[start:end:step]即可下面是几个特殊的例子[:]表示复制源列表负的index表示,从后往前。-1表示最后一个元素。相对于一维数组而言,二维(多维)数组用的会更多...

weixin_40008870的博客 858
上一篇: python-NumPy库
下一篇: Matplotlib 库(绘图)
M-YM
博客等级 码龄4年 173粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值