考虑一个数A
的浮点数,维数为n
,形状为D=[d1,...,dn]
(di
是非负整数)。如何填充A
以具有例如:
A[j1,...,jn]=sqrt(j1*...*jn)
其中0<=ji<=di
。如果我知道n
并且它是固定的,那么我就可以嵌套n
for循环来简单地填充ndarray。然而,在我的程序中不是这样的,除了这将是无效的事实。我想知道有没有办法
- 填充给定任意形状
D
的数组A
(例如,使用上面的公式或任何其他索引的非基督函数)。你知道吗 - 最好避免使用python
for loops
,并利用NumPy的底层功能。你知道吗
提前谢谢你的帮助。你知道吗
Tags:
需要意识到的一个重要事实是,您可以使用broadcasting to solve this problem efficiently。所以对于2D的情况你可以
一旦您对使用广播来做这些外部产品(或总和,或比较等)感到满意,我们就可以尝试解决nD的情况。你知道吗
查看上面代码的输入数组,我们发现它们有形状
所以要在nD中实现这一点,我们需要找到一种方法,它采用线性索引数组,并自动创建形状数组
Numpy提供了这样一个函数:
numpy.meshgrid(..., sparse=True)
知道了这一点,我们就可以把它放在一行:
绩效评估
为了评估这三种解决方案的性能,让我们计算几个不同张量大小的速度:
不使用labmda的ibarronds solution的修改版本,适用于3以上的更高维度:
请注意。不幸的是,他删除了他的答案,所以我将其复制到这里以供参考:
相关问题 更多 >
编程相关推荐