我在一段代码中遇到了以下内容:
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}
形式的语句中到底发生了什么,以及它的含义。非常感谢您的帮助。
答案 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}
中的每个项目具有布尔值True
或False
,具体取决于项目是否通过条件X
。因此,{item} < {value}
意味着每当数组项小于X[X < {value}] = {value}
时,我们就为值{value}
赋值。以下内容将使事情更加清楚:
{value}
P.S。 :此答案归功于@ForceBru及其上面的评论!