python - 每隔一段时间将迷你数组插入更大的数组(不改变大小)
问题描述
我试图在不调整大小的情况下将迷你数组插入到更大的数组中,因此使用迷你数组更改更大数组的值。
有一个迷你数组,x x。有一个更大的数组,X X 每 Y 个元素,用迷你数组值替换下一个元素。一路走到最后。
我试图通过索引来做到这一点(代码可以在下面找到)。
mesh_array = np.zeros(shape=(100,100), dtype=np.uint8)
mini_square = np.ones(shape=(2,2), dtype=np.uint8)
flattened_array = np.ravel(mesh_array)
flattened_minisquare = np.ravel(mini_square)
flattened_array[1:-1:10] = flattened_minisquare
预期结果是每 10 个元素,它将用 flattened_minisquare 值替换以下元素。
[0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,0...]
我得到的错误信息:
"ValueError: could not broadcast input array from shape (4) into shape (1000)"
解决方案
可能有更好的方法,但一种方法是按如下方式处理此问题:
import numpy as np
mesh_array = np.zeros(shape=(100,100), dtype=np.uint8)
mini_square = np.ones(shape=(2,2), dtype=np.uint8)
flattened_array = np.ravel(mesh_array)
flattened_minisquare = np.ravel(mini_square)
现在,我们可以构造数组,该数组将对应于您希望minisquare
将剩余值填充为零的位置。请注意,如果给定的输出是正确的,在这种情况下它将是一个长度为 13 的数组。原始数组的 9 个元素 + 来自 minisquare 的 4 个元素
stepsize = 10
temp = np.zeros(stepsize + len(flattened_minisquare) - 1)
temp[-len(flattened_minisquare):] = flattened_minisquare
我们还为没有被 minisquare 填充的值创建掩码。
mask = np.copy(temp)
mask[-len(flattened_minisquare):] = np.ones_like(flattened_minisquare)
mask = ~mask.astype(bool)
现在,只需使用np.resize
扩展掩码和临时数组,然后最后使用掩码从旧数组中填充值。
out = np.resize(temp, len(flattened_array))
final_mask = np.resize(mask, len(flattened_array))
out[final_mask] = flattened_array[final_mask]
print(out)
#[0. 0. 0. ... 0. 0. 0.]
推荐阅读
- aws-lambda - What is the meaning of this error "Invalid KeySchema: Some index key attribute have no definition (Service: AmazonDynamoDBv2);
- apache-spark - What is the most efficient way to read in a partitioned parquet file with pyspark?
- xml - Performance Issue of a Join in Xquery
- angular - Angular:更新行为主体
- javascript - problem with JS comparison logic if/and/or
- azure-devops-migration-tools - TfsAreaAndIterationProcessorOptions 错误
- python-3.x - 用作 Docker 基础镜像时出现 TensorFlow 错误
- ionic-framework - 带有 Microsoft SSO 的 Ionic 5 电容器
- java - 使用流删除所有文件和子目录,但不删除 java 中的目录本身
- python - 构建 CNN 时出现 PyTorch 错误:“仅支持 1 批空间目标(3D 张量),但目标大小为:: [1, 2, 64, 64]”