尝试使用以下命令在mac中安装Python3:
brew安装python3
当我运行命令得到以下错误:
错误:已安装python 2.7.14_2要升级到3.6.5,请运行 __CODE__
如何在没有升级的情况下将python2和python3保存在mac中...
谢谢.!
对于每个矩阵元素,我想添加其所有相邻单元格的值。
从我的初始数组开始
board = np.array([[0, 1, 1],
[0, 1, 0],
[1, 0, 0]])
Run Code Online (Sandbox Code Playgroud)
我的结果应该是:
([2,2,2],
[3,3,3],
[1,2,1])
Run Code Online (Sandbox Code Playgroud)
我创建了一个函数并使用蛮力方法来查找其周围是否存在单元格。如果是,则将这些值相加并返回总数。我不确定我是否正确地处理我的 if 语句。它说以下错误
'具有多个元素的数组的真值不明确:使用 a.any() 或 a.all()'
def count_living_neighbors(board):
count = np.zeros(board.shape, dtype=int)
#
# YOUR CODE HERE
#
for row in range(len(board)):
for column in range(len(board[row])):
total = 0
if (board[column - 1]).any() in board:
total += board[row][column-1]
if (board[column + 1]).any() in board:
total += board[row][column+1]
if (board[row - 1]).any() in board:
total += board[row-1][column]
if (board[row + 1]).any() in board: …Run Code Online (Sandbox Code Playgroud) 如何将对象列表转换为熊猫数据框?
class Person(object):
def __init__(self):
self.name = ""
self.year = 0
self.salary = 0
Run Code Online (Sandbox Code Playgroud)
例如下面的作品,但我想有一个人类列表
import pandas as pd
import numpy as np
data = {'name': ['Alice', 'Bob', 'Charles', 'David', 'Eric'],
'year': [2017, 2017, 2017, 2017, 2017],
'salary': [40000, 24000, 31000, 20000, 30000]}
df = pd.DataFrame(data, index = ['Acme', 'Acme', 'Bilbao', 'Bilbao', 'Bilbao'])
print(df)
Run Code Online (Sandbox Code Playgroud) 以下玩具DataFrame:
data = np.arange(35, dtype=np.float32).reshape(7, 5)
data = pd.concat((
pd.DataFrame(list('abcdefg'), columns=['field1']),
pd.DataFrame(data, columns=['field2', '2014', '2015', '2016', '2017'])),
axis=1)
data.iloc[1:4, 4:] = np.nan
data.iloc[4, 3:] = np.nan
print(data)
field1 field2 2014 2015 2016 2017
0 a 0.0 1.0 2.0 3.0 4.0
1 b 5.0 6.0 7.0 NaN NaN
2 c 10.0 11.0 12.0 NaN NaN
3 d 15.0 16.0 17.0 NaN NaN
4 e 20.0 21.0 NaN NaN NaN
5 f 25.0 26.0 27.0 28.0 29.0
6 g 30.0 31.0 32.0 …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) 给定一个类或函数,有没有办法找到最初定义它的模块的完整路径?(即使用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) 我在Pandas 源代码中看到过几次这样的事情:
def nancorr(ndarray[float64_t, ndim=2] mat, bint cov=0, minp=None):
# ...
N, K = (<object> mat).shape
Run Code Online (Sandbox Code Playgroud)
这意味着ndarray调用的 NumPymat被类型转换为 Python 对象。*
经过进一步检查,似乎使用了这个,因为如果不是,则会出现编译错误。我的问题是:为什么首先需要这种类型转换?
这里有一些例子。 这个答案只是表明元组打包在 Cython 中不像在 Python 中那样工作——但它似乎不是元组解包问题。(无论如何,这是一个很好的答案,我并不是要挑剔它。)
使用以下脚本,shape.pyx. 它将在编译时失败,并显示“无法将 'npy_intp *' 转换为 Python 对象”。
from cython cimport Py_ssize_t
import numpy as np
from numpy cimport ndarray, float64_t
cimport numpy as cnp
cnp.import_array()
def test_castobj(ndarray[float64_t, ndim=2] arr):
cdef:
Py_ssize_t b1, b2
# Tuple unpacking - this will …Run Code Online (Sandbox Code Playgroud) 在这里停留在一些基本的 Cython 上 -在 Cython 中定义字符串数组的规范且有效的方法是什么? 具体来说,我想定义一个固定长度的char. (请注意,此时我不想引入 NumPy。)
在 C 中,这将是:
/* cletters.c */
#include <stdio.h>
int main(void)
{
const char *headers[3] = {"to", "from", "sender"};
int i;
for (i = 0; i < 3; i++)
printf("%s\n", headers[i]);
}
Run Code Online (Sandbox Code Playgroud)
在 Cython 中尝试:
# cython: language_level=3
# letters.pyx
cpdef main():
cdef const char *headers[3] = {"to", "from", "sender"}
print(headers)
Run Code Online (Sandbox Code Playgroud)
但是,这给出了:
(cy) $ python3 ./setup.py build_ext --inplace --quiet
cpdef main():
cdef const char *headers[3] = {"to", "from", "sender"} …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,从而导致可能无法解决的单独错误。