Python 如何使用numpy从另一个列表中创建列表,该列表包含已修改的元素

Python 如何使用numpy从另一个列表中创建列表,该列表包含已修改的元素,python,arrays,performance,numpy,list-comprehension,Python,Arrays,Performance,Numpy,List Comprehension,我对Python编程一点也不陌生,但我对Numpy模块完全陌生。我需要使用这个模块,因为它非常快速高效 假设我有一个名为noise的数组,其定义如下: noise = [[uniform(0, 1) for i in range(size)] for j in range(size)] 用numpy的术语来说,我认为它的定义如下: noise = np.uniform(0, 1, (size, size)) 现在,假设我想生成一个新数组,它接受noise数组,并用函数函数(I,j)替换其元素

我对Python编程一点也不陌生,但我对Numpy模块完全陌生。我需要使用这个模块,因为它非常快速高效

假设我有一个名为
noise
的数组,其定义如下:

noise = [[uniform(0, 1) for i in range(size)] for j in range(size)]
用numpy的术语来说,我认为它的定义如下:

noise = np.uniform(0, 1, (size, size))
现在,假设我想生成一个新数组,它接受noise数组,并用函数
函数(I,j)
替换其元素的每个元素
noise[I][j]
使用python内置的列表理解,我只想说:

modified_noise = [[function(i, j) for i in range(size)] for j in range(size)]

我的问题是:如何使用numpy模块实现这一点。

您可以直接从以下列表中构建numpy数组:

代码: 测试代码: 结果: 您可以为此使用:

modified_noise = np.fromfunction(lambda i, j: function(i, j), (size, size), dtype=float)
这通过在每个坐标上执行函数来构造数组


相关:

使用列表理解有什么问题?看起来
函数
只适用于标量输入,对吗?对于
size*size
(i,j)对中的每一对,都无法回避对其进行一次评估,是吗?我不知道
modified\u noise
noise
有什么关系<代码>函数只将坐标作为参数,而不将噪声作为参数。顺便说一下,没有
np.uniform
noise=np.random.random_sample((大小,大小))
是正确的表达式。您似乎还对“替换每个元素”的概念感到困惑。哦,是的,有一个
numpy.uniform
。我使用了它,它实际上和预期的一样工作。而且,
修改的_noise
是由
noise
构建的。这两个函数是相关的,但仅在函数
函数
的定义中,在我的例子中,这是一个使用
fromfunction
时的扰动函数(我称之为函数是为了给你一个更抽象的代码版本):
data = [[i * j for j in range(5)] for i in range(5)]
print(data)

import numpy as np
print(np.array(data))
[[0, 0, 0, 0, 0], [0, 1, 2, 3, 4], [0, 2, 4, 6, 8], [0, 3, 6, 9, 12], [0, 4, 8, 12, 16]]

[[ 0  0  0  0  0]
 [ 0  1  2  3  4]
 [ 0  2  4  6  8]
 [ 0  3  6  9 12]
 [ 0  4  8 12 16]]
modified_noise = np.fromfunction(lambda i, j: function(i, j), (size, size), dtype=float)