- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
如果我有一个函数 f(x),它接受一个一维数组作为参数并生成一个一维数组作为输出,我可以使用 numpy.apply_along_axis将函数应用于二维数组 X 的每一行,其行是 f 的有效参数。
现在我想用一个带有两个参数的函数来做类似的事情。例如。我有一个函数 f(x, y),它将两个一维数组作为参数,我还有两个二维数组 X、Y,它们都有 n 行。我想将 f 应用于每一对行,生成一个又包含 n 行的数组。
如何以高效的方式实现这一目标?
我也对变体感兴趣,其中 f 接受更多参数或涉及更高维数组:
例如 f 可以取 3 个形状为 (2,2) 的数组 x, y, z; (3,); (5,)并产生形状 (4,4) 的结果。
我有 X、Y、Z 形状 (50, 100, 2, 2); (50, 100, 3); (50, 100, 5)并想要形状 (50, 100, 4, 4) 的结果
最佳答案
查看 numpy.apply_along_axis
的代码,我看到它只是迭代其他维度,将您的函数应用于每个“行”。有额外的代码允许大约 2 维。但是对于 2d X
它归结为:
result = np.empty_like(X)
for i, x in enumerate(X):
result[i] = func1d(x)
还有一些代码可以推断结果
应该具有什么形状。例如,如果 func1d
是 np.sum
,那么 result
将是 1d,而不是像输入那样的 2d。
所以这个函数没有特别的“效率”。多输入的扩展可以是普通的 Python zip:
result = np.empty_like(X)
for i,(x,y) in enumerate(zip(X,Y)):
result[i] = func1d(x,y)
np.ndindex
是生成索引的便捷工具。值得一看它的代码。它使用通用的 numpy 迭代器 np.nditer
,见:http://docs.scipy.org/doc/numpy/reference/arrays.nditer.html
For example f could take 3 arrays x, y, z of shape (2,2); (3,); (5,) and produce a result of shape (4,4).
I have X, Y, Z of shapes (50, 100, 2, 2); (50, 100, 3); (50, 100, 5) and want a result of shape (50, 100, 4, 4)
for i,j in np.ndindex(50,100):
result[i,j,:,:] = f(X[i,j,:,:], Y[i,j,:,:], Z[i,j,:,:])
':' 不是必需的,但要明确表示我们在两个维度上建立索引,并对其余维度进行切片。如果您想迭代第 1 维和第 3 维,并对第 2 维进行切片,则需要它们。
关于多个数组的Python apply_along_axis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28898858/
如果我有一个函数 f(x),它接受一个一维数组作为参数并生成一个一维数组作为输出,我可以使用 numpy.apply_along_axis将函数应用于二维数组 X 的每一行,其行是 f 的有效参数。
我有一个返回列子集的函数,我想高效地将它应用到每一列。所以结果不再是矩阵,而是不同长度的列列表。由于大小不匹配,我未能使用 numpy apply_along_axis 来执行此操作。除了自己遍历列之
当 numpy.apply_along_axis 将一维数组作为输入时会发生什么?当我在一维数组上使用它时,我看到了一些奇怪的东西: y=array([1,2,3,4]) 第一次尝试: apply_a
我在使用 NumPy 时遇到以下问题: 代码: import numpy as np get_label = lambda x: 'SMALL' if x.sum() <= 10 else 'BIG'
我有一个 3D ndarry 对象,它包含光谱数据(即空间 xy 维度和能量维度)。我想提取并绘制线图中每个像素的光谱。目前,我正在沿我感兴趣的轴使用 np.ndenumerate 来执行此操作,但速
如何通过 numpy.apply_along_axis() 将函数应用到 NumPy 数组的元素并进行并行化,以便利用多核?这似乎是一件自然而然的事情,在对所应用函数的所有调用都是独立的常见情况下。
我正在尝试将 numpys apply_along_axis 与需要多个参数的函数一起使用。 test_array = np.arange(10) test_array2 = np.arange(10
我遇到了 numpy.apply_along_axis在一些代码中起作用。而且我不明白有关它的文档。 这是文档的示例: >>> def new_func(a): ... """Divide e
我正在将J语言代码翻译成Python,但是python的apply函数的方式对我来说似乎有点不清楚...... 我目前有一个 (3, 3, 2) 矩阵 A 和一个 (3, 3) 矩阵 B。 我想将 A
我有一些大型数据集,我想将其拟合到单指数时间衰减。 数据由在不同时间获取的多个 4D 数据集组成,因此拟合应沿着第五维运行(通过数据集)。 我当前使用的代码如下: import numpy as np
我想计算一个 mm*n 维数组的 mm 个子数组的行列式,并希望以快速/更优雅的方式执行此操作。蛮力方法有效: import numpy as n array=n.array([[[0.,1.,2.,
np.apply_along_axis() 函数似乎非常慢(15 分钟后没有输出)。有没有一种快速的方法可以在长数组上执行此功能而无需并行化操作?我专门讨论的是具有数百万个元素的数组。 这是我正在尝试
我正在尝试实现一个函数,该函数获取 numpy 二维数组中的每一行并返回特定计算的标量结果。我当前的代码如下所示: img = np.array([ [0, 5, 70, 0, 0,
我有一个通过以下算法拟合多个 x,y 数组的函数: def f(func, data, init): import scipy.optimize as opt from numpy imp
我有一个 ndarray 子类,正确实现了 __array_wrap__,np.apply_along_axis 没有返回我的子类的实例,而是 ndarrays。下面的代码复制了我的问题: impor
我想将一个函数 f 映射到一个字符串数组上。我构建了 f 的矢量化版本并将其应用于我的数组。但是数组的第一个元素被传递了两次: import numpy as np def f(string):
我不知道如何返回 dtype U3 的字符串 我想要: 将_along_axis应用于my_array 对于每一行,返回一个字符串 def my_function(x): return x[2
我对 numpy 的 numpy.apply_along_axis() 函数何时会优于简单的 Python 循环感到困惑。例如,考虑一个有很多行的矩阵,您希望计算每一行的总和: x = np.ones
我是一名优秀的程序员,十分优秀!