python - 如何在 Python 中使用行和列迭代来填充矩阵

标签 python numpy matrix iteration

所以我有一个包含 5 个整数 v 的数组和另一个包含 10 个整数 v 的数组。 我有一个 5 x 10 矩阵 P,我想要填充它,以便 (P)ij = v[i] + u[j]

我尝试过:

P = np.empty((len(asset_grid),len(asset_grid)))
for i in range(asset_grid):
    for j in range(asset_grid):
        P[i,j] = asset_grid[i] + asset_grid[j]

但它给了我一个错误

TypeError: only integer arrays with one element can be converted to an index

我应该如何在 Python 中做到这一点。如果我的方法太天真,我深表歉意,我习惯了Matlab,现在正在慢慢学习Python。任何帮助表示赞赏。

最佳答案

广播是您想做的事情。尽管对于像您这样的小数组来说,这没有什么区别,但对于较大的数组来说,它会产生显着差异:

>>> arr1 = np.arange(5)
>>> arr2 = np.arange(10,20)
>>> arr1[:,None] + arr2
array([[10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
       [11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
       [12, 13, 14, 15, 16, 17, 18, 19, 20, 21],
       [13, 14, 15, 16, 17, 18, 19, 20, 21, 22],
       [14, 15, 16, 17, 18, 19, 20, 21, 22, 23]])

一般为numpy您希望避免行和列上的迭代并使用矢量化/广播操作。这就是速度改进的真正来源。

因此,根据您的评论进行详细说明:

Say P_ij is ith element of x raised to the 4th power minus jth element of y raised to 2nd power

一般来说,Python 使用常用的 Python 运算符以向量化方式支持大多数算术运算:

>>> arr1[:, None]**4 - arr2**2
array([[-100, -121, -144, -169, -196, -225, -256, -289, -324, -361],
       [ -99, -120, -143, -168, -195, -224, -255, -288, -323, -360],
       [ -84, -105, -128, -153, -180, -209, -240, -273, -308, -345],
       [ -19,  -40,  -63,  -88, -115, -144, -175, -208, -243, -280],
       [ 156,  135,  112,   87,   60,   31,    0,  -33,  -68, -105]])

关于python - 如何在 Python 中使用行和列迭代来填充矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45966829/

相关文章:

c++ - C中1的稀疏矩阵的快速矩阵乘法

python - 张量数组 TensorArray_1_0 : Could not read from TensorArray index 0 because it has not yet been written to

python - 通过Python脚本将文件上传到网站

python - 从段落中的字符范围获取句子的单词范围

python - 同一图上的条形图/线图,但条形图前面的轴和线图不同

python - 在 pandas 和 numpy 中聚合 lambda 函数

python - 如何从numpy中的D数组创建D维坐标数组

python - Python 对数下降曲线上的梯度下降

c - 以列方式从二进制矩阵获取 1 的索引

matlab - 如何在 matlab 中将给定的邻接矩阵表示为无向加权图?