numpy - Numpy:多元索引?
问题描述
我徘徊,是否可以一次索引多个维度?随着一些广播。例子 :
假设我有一个数组A
,形状(n,d)
。假设我有一个索引数组,比如和I
之间的整数值。设置。0
d-1
B = A[:,I]
如果shape(I) == (k,)
, 对于什么k
, 那么B
有 形状(n,k)
和B[x,y] = A[x,I[y]]
.
但如果shape(I) == (k,p)
无论如何,(k,p)
那么我想B
被塑造(n,k,p)
。B[x,y,z] = A[x,I[y,z]]
1°我怎样才能得到这种行为?
2° 它有我没有看到的缺点吗?
解决方案
您可以完全按照您的描述进行操作:
import numpy as np
n = 100
d = 20
k = 10
p = 17
A = np.random.random((n, d))
I = np.random.randint(low=0, high=d, size=(k, p))
B = A[:, I]
print(B.shape) # (n, k, p)
# Testing if the new array B is constructed as expected
x = 3
y = 5
z = 7
print(B[x, y, z])
print(A[x, I[y, z]])
print(B[x, y, z] == A[x, I[y, z]])
如果没有上下文,很难回答这是否是一个好的实现。但总的来说,如果您考虑到速度,使用 numpy 和矢量化是一个好主意。
推荐阅读
- python - 将 args 直接传递给继承类的函数
- javascript - 从 npm 脚本 package.json 捕获退出标志
- python - 使用神经网络预测新观察的输出
- python - 试图解决 /usr/local/opt/openssl/lib/libssl.1.0.0.dylib (LoadError) 导致错误的解释器:/usr/local/opt/python/bin/python2.7
- c++ - GCC 10.2 不接受 lambda 空 lambda 作为 constexpr std::function
- php - Laravel 迁移问题
- macports - 如何在 Mac OS X Big Sur Beta 上构建 macports 2.6.3?“不支持的架构”错误
- sql - 在sql中查找每个类别和子类别的最大日期
- postgresql - postgresql 中的 TIMESTAMPDIFF 别名
- c# - 使用 Jsonsoft 反序列化期间单行字符串失败