我有一个NxM数组,以及我想用来对数组进行切片的列索引集的任意列表.例如,3x 3数组

my_arr = np.array([[1, 2, 3], [1, 2, 3], [1, 2, 3]])

和指数集

my_idxs = [[0, 1], [2]]

我想使用索引对从数组中 Select 相应的列,并使用np.linalg.norm()获得(行方向)载体的长度.我想对所有索引对这样做.给定上述数组和索引集列表,这应该给出:

[[2.23606797749979, 3],
 [2.23606797749979, 3],
 [2.23606797749979, 3]]

当所有集的索引数量相同时(例如,使用my_idxs = [[0, 1], [1, 2]],我可以简单地使用np.linalg.norm(my_arr[:, my_idxs], axis=1):

[[2.23606797749979, 3.605551275463989],
 [2.23606797749979, 3.605551275463989],
 [2.23606797749979, 3.605551275463989]]

然而,当它们不是(就像my_idxs = [[0, 1], [2]]的情况一样)时,不同的索引列表长度在切片时会产生错误,因为索引集数组的形状不规则.有没有什么方法可以实现单行选项,而无需循环索引集列表并分别处理每个索引集?

推荐答案

您可以try :

my_arr = np.array([[1, 2, 3], [1, 2, 3], [1, 2, 3]])
my_idxs = [[0, 1], [2]]

out = np.c_[*[np.linalg.norm(my_arr[:, i], axis=1) for i in my_idxs]]
print(out)

输出:

[[2.23606798 3.        ]
 [2.23606798 3.        ]
 [2.23606798 3.        ]]

Python相关问答推荐

将HLS纳入媒体包

如何在Python中使用io.BytesIO写入现有缓冲区?

当密钥是复合且唯一时,Pandas合并抱怨标签不唯一

如何在Python中将returns.context. DeliverresContext与Deliverc函数一起使用?

更改键盘按钮进入'

NP.round解算数据后NP.unique

使用setuptools pyproject.toml和自定义目录树构建PyPi包

递归访问嵌套字典中的元素值

形状弃用警告与组合多边形和多边形如何解决

删除marplotlib条形图上的底边

如何保持服务器发送的事件连接活动?

如何在FastAPI中为我上传的json文件提供索引ID?

Maya Python脚本将纹理应用于所有对象,而不是选定对象

如何获取Python synsets列表的第一个内容?

用SymPy在Python中求解指数函数

用fft计算指数复和代替求和来模拟衍射?

以极轴表示的行数表达式?

PYTHON中的selenium不会打开 chromium URL

VSCode Pylance假阳性(?)对ImportError的react

Numpy`astype(Int)`给出`np.int64`而不是`int`-怎么办?