我想要一个n维矩阵的子矩阵。事先不知道矩阵的维数。因此给出:
import random
a = [10 for _ in range(0, random.randint(0,10))]
M = np.full(a, True)
# Now get the submatrix dynamically with block notation
# so something like:
# str = ["1:5" for _ in range(0, len(a))].join(",")
# N = eval("M[ " + str + "]")
我想知道一种明智的方法,也可以在速度上明智地实现这种符号。
(Numpy extract submatrix中提供的另一个答案不能直接解决问题,因为使用.ix_
接受的答案不接受切片。)
答案 0 :(得分:2)
我们可以使用np.s_
,其背后使用slice
表示法-
M[[np.s_[1:5]]*M.ndim]
这给了我们FutureWarning
:
FutureWarning:对多维使用非元组序列 索引已弃用
为避免这种情况,我们需要用tuple()
包装,就像这样-
M[tuple([np.s_[1:5]]*M.ndim)]
使用显式slice
表示法是-
M[tuple([slice(1,5)]*M.ndim)]
答案 1 :(得分:1)
有了不错的与堆栈溢出相关的搜索选项,我已经看到np.ix_
,Numpy extract submatrix,那么它将变成:
N = M[np.ix_(*[range(1,5) for _ in range(0, len(a))])]