Python 创建二维数组

这篇具有很好参考价值的文章主要介绍了Python 创建二维数组。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一. 创建二维数组遇到的问题

List (列表)是 Python 中最基本的数据结构。在用法上,它有点类似数组,因为每个列表都有一个下标,下标从 0 开始。因此,我们可以使用 list[1] 来获取下标对应的值。如果我们深入下列表的底层原理,会发现列表是基于 PyListObject 实现的。PyListObject 是一个变长对象,所以列表的长度是随着元素多少动态改变的。同时它还支持插入和删除等操作,所以它还是一个可变对象。

1. 列表能创建多维数组?

列表是支持操作符,如果一个列表与 ‘ * ’ 号结合使用,能达到重复列表的效果,比如:

list_one = [0]
list_two = [0] * 3
print(list_one)
print(list_two)

>>> 运行结果:

[0]
[0, 0, 0]

那么利用这个重复特性,我们是否可以来创建一个二维数组呢?于是乎,我进行一顿猛操作,结果就被我折腾出来了。

list_one = [0]
list_two = [[0] * 3] * 3
print(list_one)
print(list_two)

>>> 运行结果:

[[0, 0, 0], [0, 0, 0], [0, 0, 0]]

看起来很完美的操作,但是如果进行一些列表更新操作,问题就显露出来了。比如我对 list_two 的更换中间位置的值,即对 list_two[1][1] 进行更换值。

list_two = [[0] * 3] * 3
print(list_two)

list_two[1][1] = 2
print(list_two)

不难发现,运行结果有点不对劲,列表中有三个位置的值也改变了。

[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
[[0, 2, 0], [0, 2, 0], [0, 2, 0]]

为什么会出现在这种情况呢?原因是浅拷贝,我们以这种方式创建的列表,list_two 里面的三个列表的内存是指向同一块,不管我们修改哪个列表,其他两个列表也会跟着改变。

二. 解决:使用列表创建一个二维数组,可以使用生成器来辅助实现

list_three = [[0 for i in range(3)] for j in range(3)]
print(list_three)
list_three[1][1] = 3
print(list_three)

对 list_three 进行更新操作,这次就能正常更新了。

[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
[[0, 0, 0], [0, 3, 0], [0, 0, 0]]

除了以上的方式,还有一种更加简洁方便的方式,就是使用 NumPy 模块。

三. 解决:相比 List,NumPy 数组的优势

NumPy 全称为 Numerical Python,是 Python 的一个以矩阵为主的用于科学计算的基础软件包。NumPy 和 Pandas、Matpotlib 经常结合一起使用,所以被人们合称为数据分析三剑客。Numpy 中有功能强大的 ndarray 对象,能创建 N 维的数组,另外还提供很多通用函数,支持对数组的元素进行操作、支持对数组进行算法运算以及提供常用的统计函数。

相比 List 对象,NumPy 数组有以下优势:

  1. 这是因为列表 list 的元素在系统内存中是分散存储的,而 NumPy 数组存储在一个均匀连续的内存块中。这样数组计算遍历所有元素,不像列表 list 还需要对内存地址进行查找,从而节省了计算资源。
  2. Numpy数组能够运用向量化运算来处理整个数组,速度较快;而 Python 的列表则通常需要借助循环语句遍历列表,运行效率相对来说要差。
  3. NumPy 中的矩阵计算可以采用多线程的方式,充分利用多核 CPU 计算资源,大大提升了计算效率。
  4. Numpy 使用了优化过的C语言的 API,运算速度较快。
1. 创建数组

前面说到 NumPy 的主要对面是 ndarray 对象,它其实是一系列同类型数据的集合。因为 ndarray 支持创建多维数组,所以就有两个行和列的概念。

创建 ndarray 的第一种方式是利用 array 方式:

import numpy as np
# 创建一维数组
nd_one = np.array([1, 2, 3])
# 创建二维数组
nd_two = np.array([[1, 2, 3], [4, 5, 6]])

print(nd_one)
print(nd_two)
print('nd_two.shape =', nd_one.shape)
print('nd_two.shape =', nd_two.shape)

>>> 运行结果:

[1 2 3]
[[1 2 3]
 [4 5 6]]
nd_two.shape = (3,)
nd_two.shape = (2, 3)

其中 shape 是数组的一个属性,表示获取数组大小(有多少行,有多少列),如果是一维数组,则只显示(行,)。代码中打印出 nd_two 的形状,输出为(2,3),表示数组中有 2 行 3 列。

2. 第二种办法则使用 Numpy 的内置函数
2.1 1 使用arange 或 linspace 创建连续数组。
```python
import numpy as np
# arange() 类似Python内置函数的 range()
# arange(初始值, 终值, 步长) 不包含终值
x0 = np.arange(1, 11, 2)
print(x0)

# 创建一个 5x3 的数组
x1 = np.arange(15).reshape((5, 3))
print(x1)

# linspace()线性等分向量
# linspace(初始值, 终值, 元素个数) 包含终值
x2 = np.linspace(1, 11, 6)
print(x2)

>>> 运行结果:

[1 3 5 7 9]

[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]
 [12 13 14]]

[  1.   3.   5.   7.   9.  11.]

虽然 np.arange 和 np.linspace 起到的作用是一样的,都是创建等差数组,但是创建的方式是不同的。

2. 使用 zeros(),ones(),full() 创建数组
import numpy as np
# 创建一个 3x4 的数组且所有值全为 0
x3 = np.zeros((3, 4), dtype=int)
print(x3)
# 创建一个 3x4 的数组且所有元素值全为 1
x4 = np.ones((3, 4), dtype=int)
print(x4)
# 创建一个 3x4 的数组,然后将所有元素的值填充为 2
x5 = np.full((3, 4), 2, dtype=int)
print(x5)

>>> 运行结果:

[[0 0 0 0]
 [0 0 0 0]
 [0 0 0 0]]

[[1 1 1 1]
 [1 1 1 1]
 [1 1 1 1]]

[[2 2 2 2]
 [2 2 2 2]
 [2 2 2 2]]
3. 使用 eye() 创建单位矩阵

eye() 创建的数组特点是行数和列数都是一样。因为它创建出来的是单位矩阵,单位矩阵是正形矩阵,对角线的值均为 1,其他位置的值为 0。

import numpy as np
# 创建 3x3 的单位矩阵
x6 = np.eye(3, dtype=int)
print(x6)

>>> 运行结果:

[[1 0 0]
 [0 1 0]
 [0 0 1]]
4. 使用 diag() 创建对角矩阵

diag() 是创建一个 NxN 的对角矩阵,对角矩阵是对角线上的主对角线之外的元素皆为 0 的矩阵。

import numpy as np
x7 = np.diag([1, 2, 3])
print(x7)

>>> 运行结果:

[[1 0 0]
 [0 2 0]
 [0 0 3]]
5. 使用 random 创建随机数组

numpy 中的 random 中有很多内置函数,能简单介绍其中的几种。

import numpy as np
# 创建 2x2 数组且所有值是随机填充
x9 = np.random.random((2, 2))
print(x9)

# 创建一个值在 [0, 10) 区间的 3x3 的随机整数
x10 = np.random.randint(0, 10, (3, 3))
print(x10)

>>> 运行结果:

[[ 0.77233522  0.41516417]
 [ 0.22350126  0.31611254]]

[[0 6 5]
 [7 6 4]
 [5 5 9]]

四. 总结

Python 创建一个二维列表

1. 空二维列表
lis=[[] for i in range(5)]

for i in range(5):
	lis.append([])

Python 创建二维数组

2. 普通二维列表
lis=[[i for i in range(5)] for i in range(5)]
print(lis)

tis=[]
for i in range(5):
    tis.append([])
    for j in range(5):
        tis[i].append(j)
print(tis)

Python 创建二维数组
Python 创建二维数组文章来源地址https://www.toymoban.com/news/detail-494261.html

五. 参考链接

  1. Python创建二维数组的正确姿势
  2. Python 创建一个二维列表

到了这里,关于Python 创建二维数组的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python基础】二维数组 (也叫矩阵)取值 示例~~~

      “忠诚的意义在于我们不应该忘记爱过的每一个人。”     🎯作者主页: 追光者♂🔥          🌸个人简介:   💖[1] 计算机专业硕士研究生💖   🌿[2] 2023年城市之星领跑者TOP1(哈尔滨)🌿   🌟[3] 2022年度博客之星人工智能领域TOP4🌟   🏅[4] 阿里云社区特邀专家博

    2024年02月12日
    浏览(56)
  • 力扣:62. 不同路径(动态规划,附python二维数组的定义)

    一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径? 示例 1: 输入:m = 3, n = 7 输出:28 示例 2: 输入:m = 3, n

    2024年02月03日
    浏览(42)
  • Python中二维数据(数组、列表)索引和切片的Bug

    对于一维数据进行索引和切片操作,大家都比较熟悉通过下面代码进行实现 对于一维列表元组等相关结果的索引和切片操作,与一维数组类似 对于二维数据的索引和切片就有一些需要注意的事项了,如果一不小心可能会出现意料之外的Bug 上面就是二维数组索引和切片的大部

    2024年01月20日
    浏览(45)
  • QT调用python传递图像和二维数组,并接受python返回值(图像)

    用QT调用python代码,将QT读取的图像(Mat矩阵)作为参数传入python中,将QT的二维数组作为参数传递给python,python接收QT传入的图像进行计算,将结果返回给QT。 1.新建QT项目 说明:QT的编译环境我使用的MinGW 64,编译的release包 (1)按照下图依次选择Application,Qt Widgets Application, 然

    2024年02月09日
    浏览(90)
  • Python获取二维数组(矩阵)第二列值与最大值

    对于二维数组(矩阵)的应用有多广与多重要,怎么研究都不为过,突然想获取其中最大的一组值,发现max返回的是第一列最大值的这组数,如何获得第二列最大的这组数呢? 比如: A=[[1, 2], [12, 22], [22, 5], [22, 50], [122, 50], [330, 3], [4, 400], [34, 56], [3, 44]] 如果max(A),返回的是[330, 3

    2024年02月06日
    浏览(49)
  • python 创建数组的方法

      数组是一个集合,它把一个对象放在集合的某个位置。数组可以存放一个或多个对象,每个对象都是一个数组。在 python中,我们可以使用 new创建一个数组,然后对其进行操作。 下面来看看如何创建一个简单的数组吧。 首先我们要创建一个新的数组,我们在定义元素

    2023年04月09日
    浏览(31)
  • Python 数组和列表:创建、访问、添加和删除数组元素

    Python 没有内置支持数组,但可以使用 Python 列表来代替。 本页将向您展示如何使用列表作为数组,但要在 Python 中使用数组,您需要导入一个库,比如 NumPy 库。数组用于在一个变量中存储多个值: 示例,创建一个包含汽车名称的数组: 数组是一种特殊的变量,可以同时保存

    2024年02月08日
    浏览(53)
  • chatgpt赋能python:Python如何创建一个空数组?

    在Python中,数组是一种常见的数据结构,用于存储一系列的值。创建一个空数组是一项基本操作,本文将介绍Python中如何创建一个空数组。 数组是一种数据结构,它可以存储一系列的值。Python中的数组可以存储不同类型的数据,例如数字、字符串、布尔值等。数组可以通过索

    2024年02月12日
    浏览(42)
  • Python Numpy入门基础(一)创建数组

    1- np.array() 参数众多,初学时只要关注基本用法。 元组、列表转换 内置函数 range() 数组副本copy,开辟一块新内存复制原数组 主要参数: dtype=     数组元素的数据类型,可选 copy=      对象是否需要复制,可选 order=     创建数组的样式,C为行方向,F为列方向,A为任意方

    2024年02月14日
    浏览(44)
  • Python numpy - 数组的创建与访问

    目录 一 数组array的创建途径 1  列表list  2 函数array  3 函数arange 4 函数zeros 5 函数eyes 6 随机函数randn/ randint 二 数组array的访问  1 访问形状/元素个数/数据类型  2 访问一维数组的位置/范围 3 访问二维数组的位置/范围 4 用:访问二维数组的切片 生成数组的常用途径 list列表

    2024年02月07日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包