48_Python列表和数组与numpy.ndarray的区别和使用方法
Python 在标准库中有一个列表作为内置类型和一个数组数组。您还可以通过安装数值库 NumPy 来使用多维数组 numpy.ndarray。 我将解释它们之间的区别以及如何正确使用它们。
我将解释它们之间的区别以及如何正确使用它们。
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
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
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.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 处理很容易。