有没有可能使用NumPy切片将下面的花哨索引转换为基本索引?
import numpy as np
fancy_indices = np.arange(10), 18 - np.arange(10)
source = np.arange(400).reshape(20, 20)
target = source[fancy_indices]
字符串
这些花哨的索引指向矩阵的非反对角线元素。元素之间的步幅也是固定的。有没有一种方法可以使用基本的索引,而不是花哨的索引,来实现相同的target
(这样返回的数组就不拥有数据,也不是内存连续的),同时仍然具有可读的代码?
3条答案
按热度按时间xiozqbni1#
字符串
res
是源代码的view
,但它是只读的:型
查看
np.diag
的代码,我们可以看到它使用arr.flat
索引。因此我们可以直接用以下公式获得目标:型
不过,这并不是一个
view
。np.diagonal
记录了只读视图位。还演示了反对角线。np.diag
使用np.diagonal
(如果给定2D数组)。arr.diagonal
被编译,但是np.diag
使用flat
技巧来创建对角矩阵。在评论中,我提到了使用
as_strided
。这样得到10个反对角线元素,但从19个开始,而不是18个。但是对于这个目的,flat
更容易使用。型
ymdaylpp2#
我认为这是困难的,因为切片只在每个轴上执行。你可以做的是使用生成器,它的优点是不会分配内存。例如:
字符串
kse8i1jr3#
受@hpaulj的回答启发,我认为最有效的内存方法是
字符串
或者是
型