如何解决Python 中的 3d 函数和矩阵——我应该使用 NumPy 吗?
我是 Python 和编程的新手,正在尝试了解通常如何处理具有内部关系的数组。我尝试使用二维和三维列表制作乘法表并得到了这个(对于最多 4 的乘法表):
n = 4
a = [x for x in range(1,n+1)]
b = [x for x in range(1,n+1)]
mp_table = []
for i in a:
c = []
for j in b:
c.append(i*j)
mp_table.append(c)
print(mp_table)
这将按预期输出 [[1,2,3,4],[2,4,6,8],[3,9,12],[4,8,12,16]]。
此代码在三个维度上有效:
n = 4
a = [x for x in range(1,n+1)]
mp_table = []
for i in a:
c = []
for j in b:
c.append([i*j*t for t in range(1,n+1)])
mp_table.append(c)
print(mp_table)
输出:
[[[1,16]],[[2,16],[6,18,24],[8,16,24,32]],[[3,[9,27,36],[12,36,48]],[[4,32],48],[16,32,48,64]]]
但是,我还没有找到在 NumPy 中做同样事情的方法。我也不确定如何概括,以便可以输入输出的维度,而不必嵌套列表理解。有没有更简单/更好的方法来用 Python 中的函数生成多维数组?
解决方法
无论是否使用 numpy,都不需要声明数组 a 和 b。为了避免使用理解的嵌套列表,请使用 numpy.zeros
看看这个解决方案:
对于 2D:
import numpy as np
n = 4
mp_table = np.zeros((n,n),dtype=np.uint16)
for i in range(1,n+1):
for j in range(1,n+1):
mp_table[i-1][j-1] = i*j
print(mp_table)
输出:
[[ 1 2 3 4]
[ 2 4 6 8]
[ 3 6 9 12]
[ 4 8 12 16]]
对于 3d 来说几乎是一样的,但多了一个循环:
import numpy as np
n = 4
mp_table = np.zeros((n,n,dtype=np.uint16)
for i in range(1,n+1):
for k in range(1,n+1):
mp_table[i-1][j-1][k-1] = i*j*k
print(mp_table)
输出:
[[[ 1 2 3 4]
[ 2 4 6 8]
[ 3 6 9 12]
[ 4 8 12 16]]
...
[[ 4 8 12 16]
[ 8 16 24 32]
[12 24 36 48]
[16 32 48 64]]]
编辑:如果您希望代码看起来漂亮,您也可以在一行中构建每个矩阵:
[np.linspace(i,n*i,dtype=np.uint16) for i in range(1,n+1)] # 2D
[[np.linspace(i*j,n*i*j,n+1)] for j in range(1,n+1)] # 3D
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。