Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用随机放置的NAN创建示例numpy数组_Python_Arrays_Numpy_Nan - Fatal编程技术网

Python 使用随机放置的NAN创建示例numpy数组

Python 使用随机放置的NAN创建示例numpy数组,python,arrays,numpy,nan,Python,Arrays,Numpy,Nan,出于测试目的,我想创建一个带有c随机放置的nan的M×Nnumpy数组 import numpy as np M = 10; N = 5; c = 15; A = np.random.randn(M,N) A[mask] = np.nan 我在使用c真元素创建掩码时遇到问题,或者这可以直接通过索引来完成?您可以在新数组上使用来创建掩码: import numpy as np M = 10; N = 5; c = 15; A = np.random.randn(M,N) mask=np.

出于测试目的,我想创建一个带有
c
随机放置的nan的
M×N
numpy数组

import numpy as np

M = 10;
N = 5;
c = 15;
A = np.random.randn(M,N)

A[mask] = np.nan
我在使用
c
真元素创建
掩码时遇到问题,或者这可以直接通过索引来完成?

您可以在新数组上使用来创建掩码:

import numpy as np

M = 10;
N = 5;
c = 15;
A = np.random.randn(M,N)

mask=np.zeros(M*N,dtype=bool)
mask[:c] = True
np.random.shuffle(mask)
mask=mask.reshape(M,N)

A[mask] = np.nan
其中:

[[ 0.98244168  0.72121195  0.99291217  0.17035834  0.46987918]
 [ 0.76919975  0.53102064         nan  0.78776918         nan]
 [ 0.50931304  0.91826809  0.52717345         nan         nan]
 [ 0.35445471  0.28048106  0.91922292  0.76091783  0.43256409]
 [ 0.69981284  0.0620876   0.92502572         nan         nan]
 [        nan         nan         nan  0.24466688  0.70259211]
 [ 0.4916004          nan         nan  0.94945378  0.73983538]
 [ 0.89057404  0.4542628          nan  0.95547377         nan]
 [ 0.4071912   0.36066797  0.73169132  0.48217226  0.62607888]
 [ 0.30341337         nan  0.75608859  0.31497997         nan]]
您可以与可选的
replace=False
一起使用
随机选择而不进行替换
,并在
a
的展开版本上使用这些选项,如下所示-

A.ravel()[np.random.choice(A.size, c, replace=False)] = np.nan
样本运行-

In [100]: A
Out[100]: 
array([[-0.35365726,  0.26754527, -0.44985524, -1.29520237,  2.01505444],
       [ 0.01319146,  0.65150356, -2.32054478,  0.40924753,  0.24761671],
       [ 0.3014714 , -0.80688589, -2.61431163,  0.07787956,  1.23381951],
       [-1.70725777,  0.07856845, -1.04354202, -0.68904925,  1.07161002],
       [-1.08061614,  1.17728247, -1.5913516 , -1.87601976,  1.14655867],
       [ 1.12542853, -0.26290025, -1.0371326 ,  0.53019033, -1.20766258],
       [ 1.00692277,  0.171661  , -0.89646634,  1.87619114, -1.04900026],
       [ 0.22238353, -0.6523747 , -0.38951426,  0.78449948, -1.14698869],
       [ 0.58023183,  1.99987331, -0.85938155,  1.4211672 , -0.43369898],
       [-2.15682219, -0.6872121 , -1.28073816, -0.97523148, -2.27967001]])

In [101]: A.ravel()[np.random.choice(A.size, c, replace=False)] = np.nan

In [102]: A
Out[102]: 
array([[        nan,  0.26754527, -0.44985524,         nan,  2.01505444],
       [ 0.01319146,  0.65150356, -2.32054478,         nan,  0.24761671],
       [        nan, -0.80688589,         nan,         nan,  1.23381951],
       [        nan,         nan, -1.04354202, -0.68904925,  1.07161002],
       [-1.08061614,  1.17728247, -1.5913516 ,         nan,  1.14655867],
       [ 1.12542853,         nan, -1.0371326 ,  0.53019033, -1.20766258],
       [        nan,  0.171661  , -0.89646634,         nan,         nan],
       [ 0.22238353, -0.6523747 , -0.38951426,  0.78449948, -1.14698869],
       [ 0.58023183,  1.99987331, -0.85938155,         nan, -0.43369898],
       [-2.15682219, -0.6872121 , -1.28073816, -0.97523148,         nan]])

哦,那比我的方式优雅一点!我想我也可以将
np.random.choice
替换为
np.random.randint(0,high=A.size,size=c)
用于我的应用程序(如果替换并不重要)。但是,为什么数组在
ravel()
之后不保持平坦?@OlegKomarov
np.random.randint
可能会给您重复索引,因此我认为这在您的情况下不起作用。关于
.ravel()
这件事,它只是一个例子,所以它在内存中并不是完全平坦的。因此,“展平视图”被编入索引并设置为NaN,同时作为2D数组保留。谢谢,我正在阅读文档:)。作为最后一个好奇的问题,
ravel()
say
的文档只有在需要时才会复制。
。我能得到一个展平的
a
?@OlegKomarov如果你只是在索引它,它必须保持为二维数组。你也可以使用相同的效果。因此,它的解决方案是
np.put(A,np.random.choice(A.size,c,replace=False),np.nan)
。你的也不错!我不得不在谷歌上搜索随机选择而不进行替换,结果发现
random\u choice
有可选的
replace
参数,刚刚起作用!)