python - 根据另一个数组将numpy数组填充到位置
问题描述
import numpy as np
arr_keys = np.array(np.mat('2 3 1 0; 3 3 3 1'))
arr_rand1 = np.random.rand(2, 4)
arr_rand2 = np.random.rand(2, 4)
arr_final = np.zeros((5, 2, 4))
我想创建一个形状为 (100, 2, 4) 的名为 arr_final 的 numpy 数组,其中 100 可以认为对应于时间,2, 4 分别是行数和列数来填充arr_final
,我想使用以下逻辑:
对于每个网格单元格
arr_final
,在相应位置查找值arr_keys
,让我们调用它val_alpha
arr_final
使用从arr_rand1
该位置开始的值填充val_alpha
,并使用arr_rand2
之后的值
这可以使用 for 循环来完成,但是否有更 Pythonic 的解决方案?
- 编辑:
这是for循环解决方案:
for (i, j, k), value in np.ndenumerate(arr_final):
val_alpha = arr_keys[j][k]
arr_final[:val_alpha, j, k] = arr_rand1[j, k]
arr_final[val_alpha:, j, k] = arr_rand2[j, k]
解决方案
我们可以利用broadcasting
和boolean-indexing/masking
-
L = 5 # length of output array
mask = arr_keys > np.arange(L)[:,None,None]
arr_final_out = np.where(mask,arr_rand1,arr_rand2)
推荐阅读
- python - 将元组插入空的熊猫数据框中
- jenkins - 如何连接到作为 Jenkins 管道运行的服务器
- here-api - HERE 地图交通 API 方向
- sql - 如何在 OrientDB SQL 中“描述”一个类、索引或其他对象?
- python - Keras 2D 输入到 2D 输出
- ios - 向现有数据模型添加新实体会导致用户数据消失(轻量级核心数据迁移不起作用)
- c++ - What is better practice? Pass class member by pointer or identifier?
- cakephp - CakePHP 3.4:使用联合结果集进行分页显示重复记录
- python - 使用 Tkinter 打破其父网格的图像
- python - 运行 subprocess.Popen 时在 Python 中关闭弹出警报