numpy - Numpy:一次索引 2 个维度
问题描述
我想在某些索引给出的位置上为数组分配新值。一个例子会更清楚:
import numpy as np
#Dimensions
N = 25
n = 50
d = 100
k = 3
p = 7
A = np.random.uniform(size=(N,n,d,d))
A_new_values = np.random.uniform(size=(N,n,k,p))
indexes_new_values = np.random.choice(np.arange(d),size=k*p,replace=False).reshape((k,p))
print(A[:,:,indexes_new_values].shape)
我希望最后一行 yield (N,n,k,p)
,以便能够将新值分配为:
A[:,:,indexes_new_values] = A_new_values
但这会产生错误。我怎样才能分配A_new_values
到适当的地方A
?
解决方案
如果我理解正确,我认为你可以做你想做的事np.put_along_axis
:
import numpy as np
#Dimensions
N = 25
n = 50
d = 100
k = 3
p = 7
np.random.seed(0)
A = np.random.uniform(size=(N, n, d, d))
A_new_values = np.random.uniform(size=(N, n, k, p))
indexes_new_values = np.random.choice(np.arange(d), size=k * p, replace=False).reshape((k, p))
np.put_along_axis(A, indexes_new_values.reshape(1, 1, -1, 1), A_new_values.reshape(N, n, -1, 1), axis=2)
print(np.all(A[10, 20, indexes_new_values[1, 5]] == A_new_values[10, 20, 1, 5]))
# True
推荐阅读
- javascript - 如何在脚本标签中启动 var?
- python - 在终端中使用引号的 SyntaxError
- swift - Continuous Touch in Swift
- nginx - 两个 url 模式的 Nginx 位置块
- angular - ngModel 不更新下拉菜单中的变量
- javascript - 如何将变量描述传递给 Stripe Checkout Express 后端
- c++ - 如何将 Ubuntu 上的应用程序交叉编译到 Windows
- azure-devops - Azure DevOps 中 Epic 的 Burnup/Burndown 图表,例如 JIRA 版本报告
- r - 如何获取R中列中字符串的最后一个元素?
- c - 如何在调用 pthread_create 时修复偶尔出现的 EINVAL 错误