48_Python列表和数组与numpy.ndarray的区别和使用方法

48_Python列表和数组与numpy.ndarray的区别和使用方法

Python 在标准库中有一个列表作为内置类型和一个数组数组。您还可以通过安装数值库 NumPy 来使用多维数组 numpy.ndarray。 我将解释它们之间的区别以及如何正确使用它们。

我将解释它们之间的区别以及如何正确使用它们。

  • 列表和数组与 numpy.ndarray之间的差异
    • 列表 --list
    • 数组 --array
    • 多维数组 --numpy.ndarray
  • 教条主义和偏见的不同用法
  • 数据分析库pandas
    最后,我将介绍pandas,这是一个数据分析库,可以方便地处理以表格表示的二维数据。

列表和数组与 numpy.ndarray之间的差异

列表 --list

  • 内置型
    • 无需导入任何东西即可使用
  • 可以存储不同类型
    • 也可以用列表的列表来表示多维数组
  • 它可能与狭义上的数组不同,但是对于简单的类似数组的处理,一个列表列表通常就足够了。
l = ['apple', 100, 0.123]
print(l)
# ['apple', 100, 0.123]

l_2d = [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
print(l_2d)
# [[0, 1, 2], [3, 4, 5], [6, 7, 8]]

获取元素时,用 [] 指定位置(索引)。 0 开始。

print(l[1])
# 100

print(l_2d[1])
# [3, 4, 5]

print(l_2d[1][1])
# 4

可以指定多个切片 [:]。

print(l[:2])
# ['apple', 100]

使用内置函数max()、min()、sum()、len()计算最大值、最小值、sum、average等的例子。 len() 是一个返回元素个数的函数。

l_num = [0, 10, 20, 30]

print(min(l_num))
# 0

print(max(l_num))
# 30

print(sum(l_num))
# 60

print(sum(l_num) / len(l_num))
# 15.0

for 语句的循环处理示例。

l_str = ['apple', 'orange', 'banana']

for s in l_str:
    print(s)
# apple
# orange
# banana

数组 --array

  • 标准库的array模块的导入和使用
    • 8.7. array — 高效的数值数组 — Python 3.6.5 文档
  • 只能存储相同类型
  • 仅一维数组
  • 除了对类型有限制外,可以像列表一样处理。
    不能存储与类型代码不匹配的类型元素。
import array

arr_int = array.array('i', [0, 1, 2])
print(arr_int)
# array('i', [0, 1, 2])

arr_float = array.array('f', [0.0, 0.1, 0.2])
print(arr_float)
# array('f', [0.0, 0.10000000149011612, 0.20000000298023224])

# arr_int = array.array('i', [0, 0.1, 2])
# TypeError: integer argument expected, got float

与列表相同的处理是可能的。

print(arr_int[1])
# 1

print(sum(arr_int))
# 3

多维数组 --numpy.ndarray

  • 安装、导入和使用NumPy
  • 只能存储相同类型
    • 对象类型可以存储指向各种类型的指针
  • 可以表示多维数组
  • 丰富的数值计算方法和功能,实现高速计算
    • 可用于矩阵运算、图像处理等各种场合
import numpy as np

arr = np.array([0, 1, 2])
print(arr)
# [0 1 2]

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

在多维数组的情况下,指定以逗号分隔的位置(索引)。也可以使用切片。

print(arr[1])
# 1

print(arr_2d[1, 1])
# 4

print(arr_2d[0, 1:])
# [1 2]

可以逐个元素地执行运算(例如平方根)或查找矩阵乘积。

print(np.sqrt(arr_2d))
# [[0.         1.         1.41421356]
#  [1.73205081 2.         2.23606798]]

arr_1 = np.array([[1, 2], [3, 4]])
arr_2 = np.array([[1, 2, 3], [4, 5, 6]])

print(np.dot(arr_1, arr_2))
# [[ 9 12 15]
#  [19 26 33]]

由于某种原因经常混淆,它是一个 ndarray 类型而不是一个数组类型。 numpy.array() 是一个创建 ndarray 的函数。

教条主义和偏见的不同用法

列表列表通常足以用于所谓的类数组处理。

array 可以进行严格的内存管理,因为要存储的元素类型是有限的,但是如果你不需要担心的话,list 更适合,如果你想进行更高效的数值计算,numpy.ndarray 更适合。除了需要内存大小和内存地址的处理之外没有其他用处(我认为)。

在处理多维数组、数组的数值计算(科学计算)和矩阵运算时使用 NumPy 数组 numpy.ndarray。

计算机视觉库 OpenCV 和机器学习库 scikit-learn 使用 NumPy 数组 numpy.ndarray,因此使用这些库将自动使用 numpy.ndarray。

数据分析库pandas

数据分析库pandas 可用于二维数据的统计处理,例如表中表示的数据。

在pandas 中,二维数据被视为pandas.DataFrame。 (也可以将一维数据作为pandas.Series处理)

pandas.DataFrame 和 pandas.Series 内部都在 numpy.ndarray 中保存数据,但是有一些方便数据处理的函数和方法,比如对每一行/列的操作,以及电子表格软件中的数据透视表之类的操作。准备好了。 气氛如下。计算每列的平均值,并指定用于聚合的属性。

import pandas as pd

df = pd.read_csv('data/src/sample_pandas_normal.csv', index_col=0)
df['sex'] = ['Female', 'Male', 'Male', 'Male', 'Female', 'Male']
print(df)
#          age state  point     sex
# name                             
# Alice     24    NY     64  Female
# Bob       42    CA     92    Male
# Charlie   18    CA     70    Male
# Dave      68    TX     70    Male
# Ellen     24    CA     88  Female
# Frank     30    NY     57    Male

print(df.mean())
# age      34.333333
# point    73.500000
# dtype: float64

print(df.pivot_table(index='state', columns='sex', aggfunc='mean'))
#          age        point      
# sex   Female  Male Female  Male
# state                          
# CA      24.0  30.0   88.0  81.0
# NY      24.0  30.0   64.0  57.0
# TX       NaN  68.0    NaN  70.0

像示例那样包含数字和字符串的数据用 NumPy 处理很麻烦,但用 Pandas 处理很容易。

猜你喜欢

转载自blog.csdn.net/qq_18351157/article/details/121414780