python - 在 Python 的二维数组中输入值

标签 python arrays numpy for-loop

for i in range(limit_1):
    for j in range(limit_2):
        a[i][j]=np.sqrt(np.absolute(b[i])**2+np.absolute(c[j])**2)

是否有其他方法可以执行此任务,例如使用 numpy 函数?

最佳答案

您的原始代码:

limit_1 = 4
limit_2 = 3

import numpy as np
a = np.zeros([limit_1, limit_2])
b = np.array([1, -6, 7, 3])
c = np.array([3, 2, -1])

print("Original:")
for i in range(limit_1):
    for j in range(limit_2):
        a[i][j]=np.sqrt(np.absolute(b[i])**2+np.absolute(c[j])**2)

print(a)

输出:

Original:
[[ 3.16227766  2.23606798  1.41421356]
 [ 6.70820393  6.32455532  6.08276253]
 [ 7.61577311  7.28010989  7.07106781]
 [ 4.24264069  3.60555128  3.16227766]]

以及简化版:

print("Improved:")
a = np.sqrt(
        np.tile(np.array([b]).transpose(), (1, limit_2)) ** 2 +\
        np.tile(np.array(c).transpose(), (limit_1, 1)) ** 2)

print(a)

输出:

Improved:
[[ 3.16227766  2.23606798  1.41421356]
 [ 6.70820393  6.32455532  6.08276253]
 [ 7.61577311  7.28010989  7.07106781]
 [ 4.24264069  3.60555128  3.16227766]]

说明

首先我们将向量列 b 拉伸(stretch)为一个矩阵(然后取它的二次方):

>>> np.tile(np.array([b]).transpose(), (1, limit_2))
array([[ 1,  1,  1],
       [-6, -6, -6],
       [ 7,  7,  7],
       [ 3,  3,  3]])

>>> np.tile(np.array([b]).transpose(), (1, limit_2)) ** 2
array([[ 1,  1,  1],
       [36, 36, 36],
       [49, 49, 49],
       [ 9,  9,  9]])

然后我们对行列 c 做同样的事情:

>>> np.tile(np.array(c).transpose(), (limit_1, 1))
array([[ 3,  2, -1],
       [ 3,  2, -1],
       [ 3,  2, -1],
       [ 3,  2, -1]])
>>> np.tile(np.array(c).transpose(), (limit_1, 1)) ** 2
array([[9, 4, 1],
       [9, 4, 1],
       [9, 4, 1],
       [9, 4, 1]])

然后我们将它们相加并计算根。


附言1 - 我只使用了平方幂而不是绝对值,但是如果您仍然需要绝对值,您可以按相同的方式使用它。

附言2 - 请注意,计算可以更有效地完成,即在我们平铺阵列之前计算功率,但这种方式对于这篇文章来说更清晰)

关于python - 在 Python 的二维数组中输入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40373842/

相关文章:

python - 将每个键的值作为数组存储在字典中

python - 为什么 pandas read_csv 发出此警告? (元素比较失败)

Python:将 2D numpy 数组转换为字典

python - 使用基于带有索引的 2D 数组的 1 填充 3D numpy 数组

python - pandas df 列中的多个值并对另一列值求和

python - Spyder IDE 中的重复日志条目和锁定的日志文件

python - 正则表达式在条件 Python 之前查找特定字母

python - 将二进制 .dat 文件作为数组读取

c - 在谈论数组时, "dimension"是什么意思?”

javascript - Array.map + parseInt