numpy数组限制运算X [X <{value}] = {value}

时间:2019-05-19 17:18:38

标签: python numpy

我在一段代码中遇到了以下内容:

X = numpy.array()
X[X < np.finfo(float).eps] = np.finfo(float).eps

我从文档中发现了以下内容:

  

numpy.finfo(dtype)类:

     

浮点类型的机器限制。

     

参数:

     

dtype:浮点型,dtype或实例

     

种类繁多的浮点数据类型,用于获取信息。

我知道np.finfo(float).eps返回可表示的最低浮点值,并且X[X < np.finfo(float).eps] = np.finfo(float).eps确保数组np.finfo(float).eps中不包含任何小于X的值,但是我无法理解X[X < {value}] = {value}形式的语句中到底发生了什么,以及它的含义。非常感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

这是一种更改数组值并在满足条件时更改值的理想方法。 举一个简单的例子:

X = np.random.randint(1, 100, size=5)
print(X) # array([ 1, 17, 92,  9, 11])
X[X < 50] = 50 # Change any value lower than 50 to 50
print(X) # array([50, 50, 92, 50, 50])

如果您不复制数组X,并且以前的值会永远丢失,则基本上会更改数组np.where()。使用X = np.random.randint(1, 100, size=5) print(X) # array([ 1, 17, 92, 9, 11]) np.where(X < 50, 50, X) # array([50, 50, 92, 50, 50]) print(X) # array([ 1, 17, 92, 9, 11]) 将达到相同的目标,但不会覆盖原始数组。

import tensorflow as tf
import matplotlib.pyplot as plt
import urllib.request
import os
import zipfile

def main():
    #Step 1 - download google's pre-trained neural network
    url = 'https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip'
    data_dir = '../data/'
    model_name = os.path.split(url)[-1]
    local_zip_file = os.path.join(data_dir, model_name)
    if not os.path.exists(local_zip_file):
        # Download
        model_url = urllib.request.urlopen(url)
        with open(local_zip_file, 'wb') as output:
            output.write(model_url.read())
        # Extract
        with zipfile.ZipFile(local_zip_file, 'r') as zip_ref:
            zip_ref.extractall(data_dir)

其他信息: Fancy indexing您需要向下滚动(idk如何在特定标题处复制)

答案 1 :(得分:1)

我第一次看到它是用来替换数组中的NaNs

基本上,条件X < np.finfo(float).eps创建一个X的布尔掩码,然后对X进行迭代,以替换与之关联的True的值。

例如,

x=np.array([-4, -3, -2, -1, 0, 1, 2, 3, 4])
x[x < 0] = 0

面具阵列看起来像这样,

[True, True, True, True, False, False, False, False, False]

这是对大型数组执行以下操作的较快方法,

x=np.array([-4, -3, -2, -1, 0, 1, 2, 3, 4])
for y, idx in enumerate(x):
    if y < 0:
        x[idx] = 0

答案 2 :(得分:0)

当我们用另一个数组X索引一个numpy数组x时,输出是一个numpy数组,其值对应于X的值,索引对应于{{ 1}}。 并且x返回一个numpy数组,该数组针对X < {value}中的每个项目具有布尔值TrueFalse,具体取决于项目是否通过条件X。因此,{item} < {value}意味着每当数组项小于X[X < {value}] = {value}时,我们就为值{value}赋值。以下内容将使事情更加清楚:

{value}

P.S。 :此答案归功于@ForceBru及其上面的评论!