Python数据处理:Shape属性、维度扩展与数组操作详解

唐可
唐可
发布时间:2026-10-11| 3人浏览过
原创

本文详解Python中数据shape的常见操作。针对list无shape属性,介绍转换为np数组的方法。深入解析append与extend的区别、np.concatenate与np.append的拼接逻辑,以及transpose、.T和reshape的转置技巧。重点讲解newaxis增加维度、ravel与flatten的区别,以及-1在reshape中的模糊控制用法。

获取数据形状(Shape)

在Python中,原生列表(list)并不具备 shape 属性。若需获取数据的形状信息,必须先将列表转换为NumPy数组,或使用 np.shape() 函数进行处理。

以下示例展示了如何获取列表长度与形状:

a = [1,2,3,4,5,6,7,8,9,10,11,12]
print(len(a))
print(np.size(a))

对于二维列表,可通过 np.shape() 或直接转换为数组后访问 .shape 属性来获取形状:

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

列表追加与数组拼接

在处理数据追加时,原生列表与NumPy数组的行为存在显著差异,理解这些差异有助于避免数据结构混乱。

原生列表的追加

append() 方法会将整个对象作为单个元素追加到列表末尾;而 extend() 方法则会解包传入的可迭代对象,将其元素逐个追加到列表中。

c = [1,1,1,1]
d = [[2,2],[[2,2],[2,2]]]
c.append([1,2,3])
d.extend([1,2,3])

# 输出结果:
# [1, 1, 1, 1, [1, 2, 3]]
# [[2, 2], [[2, 2], [2, 2]], 1, 2, 3]

NumPy数组的拼接

NumPy提供了 np.concatenate() 和 np.append() 进行数组拼接。两者在默认行为上相似,但 np.concatenate() 允许通过 axis 参数指定沿特定轴进行拼接,而 np.append() 默认将数组展平后追加。

c = np.concatenate((a, b))
d = np.append(a,b)
print(c)
print(d)

# 输出示例:
# [1 1 1 1 2 2 2 2]
# [1 1 1 1 2 2 2 2]

数据转置与维度重塑

对多维数据进行转置和重塑是数据处理中的常见需求。NumPy提供了多种方法实现这一目标。

转置操作

可以使用 np.transpose() 函数、数组的 .T 属性,或结合 reshape() 方法实现转置。

a = [[1,1,1],
   [1,1,1]]
b = [[2,2,2],
   [2,2,2]]
c = [[3,3,3],
   [3,3,3]]
b = np.array(b)
c = np.array(c)

print(np.transpose(a))
print(b.T)
print(np.reshape(c, (c.shape[1], c.shape[0])))

# 输出示例:
# [[1 1]
#  [1 1]
#  [1 1]]
# [[2 2]
#  [2 2]
#  [2 2]]
# [[3 3]
#  [3 3]
#  [3 3]]

展平与重塑

np.reshape(-1) 可将多维数组转换为一维数组。此外,arr.ravel() 返回的是原数组的视图(本身),而 arr.flatten() 返回的是副本。修改 ravel() 的结果会影响原数组,而修改 flatten() 的结果则不会。

c = [[[3,3,3],
   [3,3,3]],
   [[2,2,2],
   [2,2,2]]]

print(np.reshape(c, -1))

# 输出示例:
# [3 3 3 3 3 3 2 2 2 2 2 2]
a = np.array([[1,2,3]])
b = np.array([[1,2,3]])
a1 = a.flatten()
b1 = b.ravel()
print(a)
print(b)
a1[0] = 8
b1[0] = 8
print(a)
print(b)

# 输出示例:
# [[1 2 3]]
# [[1 2 3]]
# [[1 2 3]]
# [[8 2 3]]

维度扩展与模糊控制

在机器学习中,经常需要调整数据的维度以匹配模型输入要求。使用 np.newaxis 可以在指定位置增加一个新维度。

使用 newaxis 增加维度

将 np.newaxis 放在切片中,可以在该位置产生新维度。例如,arr[:, np.newaxis] 给列方向增加维度,使形状从 (5,) 变为 (5, 1);而 arr[np.newaxis, :] 给行方向增加维度,使形状变为 (1, 5)。

a = np.array([1,1,1,1])

b = a[np.newaxis,:]
c = a[:,np.newaxis]

print(b)
print(c)

# 输出示例:
# [[1 1 1 1]]
# [[1]
#  [1]
#  [1]
#  [1]]

reshape 中的 -1 模糊控制

在 np.reshape() 中,参数 -1 代表“不确定的模糊控制”,即由NumPy自动计算该维度的大小。例如,转换为1行且列数不确定时使用 (1, -1);转换为1列且行数不确定时使用 (-1, 1)。

a = [[1,1,1],
   [1,1,1]]
b = [[2,2,2],
   [2,2,2]]
c = [[[3,3,3],
   [3,3,3]],
   [[2,2,2],
   [2,2,2]]]

print(np.reshape(c, [-1, 1]))
print(np.reshape(b, [-1, 1]))
print(np.reshape(c, [2, -1]))

# 输出示例:
# [[3]
#  [3]
#  [3]
#  [3]
#  [3]
#  [3]
#  [2]
#  [2]
#  [2]
#  [2]
#  [2]
#  [2]]
# [[2]
#  [2]
#  [2]
#  [2]
#  [2]
#  [2]]
# [[3 3 3 3 3 3]
#  [2 2 2 2 2 2]]

以上就是基于Python对数据shape的常见操作的详细内容,更多关于Python数据处理、NumPy数组操作及维度管理的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。