我意识到我的问题与numpy中的2D数组上的矢量化移动窗口 非常相似,但那里的答案并不能完全满足我的需求.
是否可以进行包含所谓边缘效应的矢量化2D移动窗口(滚动窗口)?最有效的方法是什么?
也就是说,我想将移动窗口的中心滑过我的网格,这样中心就可以在网格中的每个单元格上移动.沿着网格的边缘移动时,此操作将仅返回与网格重叠的窗口部分.如果窗口完全位于网格内,则返回完整窗口.例如,如果我有网格:
array([[1,2,3,4],
[2,3,4,5],
[3,4,5,6],
[4,5,6,7]])
Run Code Online (Sandbox Code Playgroud)
...并且我想使用3x3以该点为中心的窗口对该网格中的每个点进行采样,该操作应返回一系列数组,或者理想情况下,返回原始数组中的一系列视图,如下所示:
array([[1,2], array([[1,2,3], array([[2,3,4], array([[3,4],
[2,3]]) [2,3,4]]) [3,4,5]]) [4,5]])
array([[1,2], array([[1,2,3], array([[2,3,4], array([[3,4],
[2,3], [2,3,4], [3,4,5], [4,5],
[3,4]]) [3,4,5]]) [4,5,6]]) [5,6]])
array([[2,3], array([[2,3,4], array([[3,4,5], array([[4,5],
[3,4], [3,4,5], [4,5,6], [5,6],
[4,5]]) [4,5,6]]) [5,6,7]]) [6,7]])
array([[3,4], array([[3,4,5], array([[4,5,6], array([[5,6],
[4,5]]) [4,5,6]]) [5,6,7]]) [6,7]])
Run Code Online (Sandbox Code Playgroud)
因为我需要多次执行此操作,速度很重要,理想的解决方案是矢量化操作.
我的问题涉及优化熊猫系列的内存使用。文档说明,
a 的内存使用量与
Categorical类别数加上数据长度成正比。相比之下,objectdtype 是数据长度的常数倍。
我的理解是,pandasCategorical数据实际上是到表示类别的唯一(向下转换)整数的映射,其中整数本身占用(大概)比构成objectdtype的字符串少的字节。
我的问题:有没有规则的拇指使用时pd.Categorical将不保存记忆了object?前面提到的比例有多直接,它不也取决于系列中每个元素(字符串)的长度吗?
在下面的测试中,pd.Categorical似乎遥遥领先。
import string
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
np.random.seed(444)
%matplotlib inline
def mem_usage(obj, index=False, total=True, deep=True):
"""Memory usage of pandas Series or DataFrame."""
# Ported from https://www.dataquest.io/blog/pandas-big-data/
usg = obj.memory_usage(index=index, deep=deep)
if isinstance(obj, pd.DataFrame) and total:
usg = usg.sum()
# Bytes to megabytes …Run Code Online (Sandbox Code Playgroud) 说我有:
s = 'white male, 2 white females'
Run Code Online (Sandbox Code Playgroud)
并希望"扩展"到:
'white male, white female, white female'
Run Code Online (Sandbox Code Playgroud)
更完整的案例清单将是:
好像我很接近:
import re
# Do I need boundaries here?
mult = re.compile('two|2 (?P<race>[a-z]+) (?P<gender>(?:fe)?male)s')
# This works:
s = 'white male, 2 white females'
mult.sub(r'\g<race> \g<gender>, \g<race> \g<gender>', s)
# 'white male, white female, white female'
# This fails:
s = 'two hispanic males, 2 hispanic females'
mult.sub(r'\g<race> \g<gender>, \g<race> \g<gender>', s)
# ' , , hispanic males, …Run Code Online (Sandbox Code Playgroud) 我cv对sklearn的参数有疑问GridSearchCV。
我正在处理具有时间成分的数据,因此我认为在KFold交叉验证中进行随机混洗似乎并不明智。
取而代之的是,我想在中明确指定训练,验证和测试数据的临界值GridSearchCV。我可以这样做吗?
为了更好地阐明问题,以下是我手动解决的方法。
import numpy as np
import pandas as pd
from sklearn.linear_model import Ridge
np.random.seed(444)
index = pd.date_range('2014', periods=60, freq='M')
X, y = make_regression(n_samples=60, n_features=3, random_state=444, noise=90.)
X = pd.DataFrame(X, index=index, columns=list('abc'))
y = pd.Series(y, index=index, name='y')
# Train on the first 30 samples, validate on the next 10, test on
# the final 10.
X_train, X_val, X_test = np.array_split(X, [35, 50])
y_train, y_val, y_test = np.array_split(y, [35, 50])
param_grid = {'alpha': …Run Code Online (Sandbox Code Playgroud) 给定一个类或函数,有没有办法找到最初定义它的模块的完整路径?(即使用def xxx或class xxx.)
我知道有sys.modules[func.__module__].但是,如果func是在一个包中导入__init__.py,那么sys.modules只需重定向到那个__init__.py,因为就我的理解而言,该函数已被引入该命名空间.
一个具体的例子:
>>> import numpy as np
>>> import sys
>>> np.broadcast.__module__
'numpy'
>>> sys.modules[np.broadcast.__module__]
<module 'numpy' from '/Users/brad/.../site-packages/numpy/__init__.py'>
Run Code Online (Sandbox Code Playgroud)
显然,broadcast没有定义__init__.py; 它只是带进命名空间中的一个,这些 from module import *语句.
很高兴看到源np.broadcast中的定义位置(无论文件扩展名是什么,不管是.c还是.py).这可能吗?
为什么长度sys.getsizeof()为 1 的 Pythonstr比长度为 2 的字符串大?(对于长度 > 2,该关系似乎按预期单调增加。)
例子:
>>> from string import ascii_lowercase
>>> import sys
>>> strings = [ascii_lowercase[:i] for i, _ in enumerate(ascii_lowercase, 1)]
>>> strings
['a',
'ab',
'abc',
'abcd',
'abcde',
'abcdef',
'abcdefg',
# ...
>>> sizes = dict(enumerate(map(sys.getsizeof, strings), 1))
>>> sizes
{1: 58, # <--- ??
2: 51,
3: 52,
4: 53,
5: 54,
6: 55,
7: 56,
8: 57,
9: 58,
10: 59,
11: 60,
12: 61,
13: 62,
14: …Run Code Online (Sandbox Code Playgroud) 我刚刚注意到一些非常奇怪的事情。当我使用%%timeit -n1 -r1magic命令,在Jupyter lab中测量一段代码的执行时间时,python在执行完该块后,并没有保留局部变量的值!例如,如果我运行包含以下代码的代码块:
for i in range(10):
for j in range(10):
d = i - j
Run Code Online (Sandbox Code Playgroud)
然后print(d)在另一个块中运行,jupyter 将显示上次迭代中 d 的值。但是如果我运行这段代码:
%%timeit -n1 -r1
for in in range(10):
for j in range(10):
d = i - j
Run Code Online (Sandbox Code Playgroud)
然后运行print(d),juoyter 向我显示了一条错误消息:
NameError: name 'd' is not defined
Run Code Online (Sandbox Code Playgroud)
这种奇怪行为背后的解释是什么?
我正在使用 Google Drive API 来尝试回答一个看似简单的问题:驱动器中是否存在某个名称的文件夹?
规格:
googleapiclient例子:
鉴于封闭驱动器 ID abcdef,是否存在具有名称June 2019(和 mimeType application/vnd.google-apps.folder)的文件夹?
当前路线:
>>> from googleapiclient.discovery import build
>>> # ... build credentials
>>> driveservice = build("drive", "v3", credentials=cred).files()
>>> [i for i in driveservice.list().execute()['files'] if
... i['name'] == 'June 2019' and i['mimeType'] == 'application/vnd.google-apps.folder']
[{'kind': 'drive#file',
'id': '1P1k5c2...........',
'name': 'June 2019',
'mimeType': 'application/vnd.google-apps.folder'}]
Run Code Online (Sandbox Code Playgroud)
所以答案是肯定的,文件夹存在。但是应该有一种更有效的方法来通过.list()传递driveId. 那怎么办呢?我尝试了各种组合,所有这些组合似乎都会引发非 200 响应。
>>> FOLDER_ID = "abcdef........"
>>> driveservice.list(corpora="drive", …Run Code Online (Sandbox Code Playgroud) 我们正在尝试将KeycloakOIDCFilter其用作 Apache Spark UI 过滤器。然而,我们正在努力配置它KeycloakOIDCFilter本身。
我们在spark-defaults.conf中有:
spark.ui.filters=org.keycloak.adapters.servlet.KeycloakOIDCFilter
Run Code Online (Sandbox Code Playgroud)
该过滤器已成功获取,并且 Spark 主日志显示此过滤器已应用于所有 URL 路由。
我们已经在 Keycloak 管理控制台中生成了一个客户端配置文件,该文件已生成一个keycloak-oidc.json.
但我们如何讲述KeycloakOIDCFilter这些信息呢?
来自 Spark文档
还可以通过设置
spark.<class name of filter>.param.<param name>=<value>以下形式的配置条目在配置中指定过滤器参数:Run Code Online (Sandbox Code Playgroud)spark.ui.filters=com.test.filter1 spark.com.test.filter1.param.name1=foo spark.com.test.filter1.param.name2=bar
在我们的例子中,这似乎是:
spark.org.keycloak.adapters.servlet.KeycloakOIDCFilter.param.<name>=<value>
Run Code Online (Sandbox Code Playgroud)
但是,KeycloakOIDCFilter Java 类只有两个构造函数。一种根本不带任何参数,一种带KeycloakConfigResolver.
Keycloak Java servlet 过滤器适配器文档仅讨论web.xml在配置 Spark 的情况下不适用的内容。
那么我们如何正确配置/指向KeycloakOIDCFilterservlet 过滤器的参数呢?
更新:我们已经确定spark.org.keycloak.adapters.servlet.KeycloakOIDCFilter.param.keycloak.config.file可用于指向配置文件,但Spark 似乎不使用 SessionManager,从而导致可能无法解决的单独错误。
我对需要有点糊涂了.close()两个响应对象requests和aiohttp.(请注意,这是一个单独的实例方法,而不是 - session.close()我在谈论响应对象本身.)
Response(requests)或ClientResponse(aiohttp)在任何时候需要显式调用.close()?async with session.request('GET', 'https://www.pastebin.com')下面.)为什么要定义两个dunder方法,如果它被隐式关闭,如下所示?一些简单的测试(下面)似乎暗示响应在Session上下文管理器中定义时会自动关闭. (这本身调用self.close()中__exit__或__aexit__但这是会话,而不是Response对象的关闭.)
requests>>> import requests
>>>
>>> with requests.Session() as s:
... resp = s.request('GET', 'https://www.pastebin.com')
... resp.raise_for_status()
... print(resp.raw.closed) # `raw` is urllib3.response.HTTPResponse object
... print(resp.raw._pool)
... print(resp.raw._connection)
... c = resp.text
...
True
HTTPSConnectionPool(host='pastebin.com', port=443)
None
>>>
>>> while 1:
... print(resp.raw.closed) …Run Code Online (Sandbox Code Playgroud) python ×8
pandas ×3
python-3.x ×2
aiohttp ×1
apache-spark ×1
grid-search ×1
java ×1
jupyter-lab ×1
keycloak ×1
memory ×1
numba ×1
numpy ×1
python-3.7 ×1
regex ×1
scikit-learn ×1
string ×1