随机删去二维数组中i个元素的python实现
时间: 2023-12-09 20:37:20 浏览: 72
可以使用random模块中的sample函数来实现随机删除二维数组中的i个元素。下面是一个示例代码:
```python
import random
def delete_random_elements(arr, i # 将二维数组转为一维数组
flat_arr = [element for sublist in arr for element in sublist]
# 随机选择要删除的元素的索引
indices = random.sample(range(len(flat_arr)), i)
# 删除选定的元素
for index in sorted(indices, reverse=True):
del flat_arr[index]
# 将一维数组转回二维数组
new_arr = [flat_arr[j:j+len(arr[0])] for j in range(0, len(flat_arr), len(arr[0]))]
return new_arr
```
这个函数接受一个二维数组和要删除的元素数量作为参数。它首先将二维数组转换为一维数组,然后使用`random.sample`函数随机选择要删除的元素的索引。然后,它使用`del`语句删除选定的元素,并将一维数组转回二维数组。最后,返回删除元素后的新数组。
相关问题
10x67x3000 double我想将其中的第二维度删去我指定的部分(无规律,间断)
在MATLAB中,如果你有一个三维数组`arr`,形状为`[10, 67, 3000]`,并且你想删除第二维度中一些无规律间隔的元素,你需要先确定具体的删除位置,因为MATLAB不像Python那样支持动态修改数组。如果删除位置已知,你可以创建一个新的数组并复制需要的数据到新数组中;如果不知道具体位置,你可能需要遍历整个数组,并判断每个位置是否应该被保留。
一种可能的做法是:
1. 确定你要删除的元素的索引范围(如果是连续的)或者创建一个布尔向量指示哪些元素应该保留。
2. 使用条件操作符或循环结构创建新的数组,只保存那些标记为`true`的元素。
3. 使用`squeeze`函数去除多余的尺寸。
例如,假设你知道需要删除的行索引列表`delete_indices`,你可以这样做:
```matlab
% 假设delete_indices是一个包含无规律间隔删除索引的向量
delete_indices = [5, 12, 28]; % 假设这是要删除的行
% 创建一个与原数组同样大小的全零矩阵作为目标
new_arr = zeros([10, 1, 3000]);
% 遍历原数组,保留不在删除索引中的元素
for i = 1:length(arr)
if ~ismember(i, delete_indices)
new_arr(:,:,i) = arr(:,i,:);
end
end
% 删除多余的维度
new_arr = squeeze(new_arr);
% 检查新数组的维度
size(new_arr)
```
请注意,这种方法依赖于你能预知删除的位置。如果删除是随机的或者不可预测的,你可能需要其他方法,比如迭代过程,每次删除一个元素并更新剩余部分。
阅读全文