Python 如何使用numpy从另一个列表中创建列表,该列表包含已修改的元素
我对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)替换其元素
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)