numpy 用None随机替换数组中的值

64jmpszr  于 2023-10-19  发布在  其他
关注(0)|答案(2)|浏览(107)

假设有一个数组

arr = np.array((0,0,1,2,0,1,2,2,1,0))

我想做的是用None随机替换n值。我尝试的是

n = 5
arr[[random.randint(0, len(arr)-1) for i in range(n)]] = None

但我得到的是

TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

我怎么才能做到这一点?

f0brbegy

f0brbegy1#

首先,你必须将数组转换为浮点类型,然后你可以用np.nan替换随机索引(因为numpy不支持None):

n =5
arr = arr.astype(float)
idx = np.random.choice(len(arr),n ,replace=False)
np.put(arr, idx, [np.nan]*n)
print(arr)

输出量:

[nan nan  1. nan  0. nan  2.  2. nan  0.]
pxyaymoc

pxyaymoc2#

你可以创建一个“掩码”,然后使用列表解析从原始数组返回值或None。

import numpy as np
import random

arr = np.array((0,0,1,2,0,1,2,2,1,0))

mask = np.random.randint(2, size=len(arr))

new_arr = np.array([x if y == 1 else None for (x,y) in zip(arr, mask )])

print(new_arr)
[None None 1 None 0 1 None None 1 0]

相关问题