【问题标题】:Editing every value in a numpy matrix编辑 numpy 矩阵中的每个值
【发布时间】:2015-07-09 20:06:02
【问题描述】:

我有一个 numpy 矩阵,我用 *.csv 文件中的数据填充了该矩阵

csv = np.genfromtxt (file,skiprows=22)
matrix = np.matrix(csv)

这是一个 64x64 矩阵,看起来像

print matrix
[[...,...,....]
[...,...,.....]
.....
]]

现在我需要将每个值的对数 math.log10() 保存到另一个 64x64 矩阵中。 我怎样才能做到这一点?我试过了

matrix_lg = np.matrix(csv)
    for i in range (0,len(matrix)):
        for j in range (0,len(matrix[0])):
            matrix_lg[i,j]=math.log10(matrix[i,j])

但这仅编辑了我的初始矩阵的第一个数组(即第一行)。 这是我第一次使用 python,我开始感到困惑。

【问题讨论】:

  • 你试过np.log(np.matrix(csv))吗?
  • 使用 matrix.shape 找出行数和列数。 numpy 矩阵不是列表的列表。但是当然,Joran 的解决方案要快得多。

标签: python arrays numpy matrix 2d


【解决方案1】:

你可以这样做:

matrix_lg = numpy.log10(matrix)

它会为你做的。以这种矢量化方式执行此操作也比遍历 python 中的每个条目要快得多。它还将更优雅地处理域错误。

FWIW 但是,您发布的代码的问题是矩阵的len() 与嵌套列表的工作方式不完全相同。正如 cmets 中所建议的,您可以使用 matrix.shape 来获得适当的暗度以进行迭代:

matrix_lg = np.matrix(csv)
for i in range(0,matrix_lg.shape[0]):
    for j in range(0,matrix_lg.shape[1]):
        matrix_lg[i,j]=math.log10(matrix_lg[i,j])

【讨论】:

  • 为什么要尝试简单,当你可以用困难的方式时......你的解决方案都很好。非常感谢你们!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-30
  • 1970-01-01
  • 2021-07-24
  • 1970-01-01
  • 2021-12-27
  • 2022-08-05
  • 1970-01-01
相关资源
最近更新 更多