我遇到了这个问题ImportError numpy / core / multiarray.so:未定义符号:PyUnicodeUCS2_AsASCIIString在pyenv-virtualenv环境中安装Python 。
就我而言,它发生在matplotlib软件包而不是numpy(如上述问题中),但这基本上是相同的问题。
该问题给出的答案很简单:
针对构建为UCS-4的Python重建NumPy。
我不知道该怎么做。在另一个问题中,有人说必须使用:
./configure --enable-unicode=ucs4
Run Code Online (Sandbox Code Playgroud)
但是我不知道如何与pyenv一起使用该命令。
在pyenv回购问题列表中也提到了此问题,并在注释中给出了解决方案。可悲的是(对我而言)我不明白如何应用所说评论中解释的修复程序。
所以我的问题基本上是:如何通过将Python构建为UCS-4 pyenv?
pymc3在专门使用了多年之后,我最近开始学习emcee,并且遇到了一些概念问题。
我正在练习霍格的《将模型拟合到数据》的第 7 章。这涉及到具有任意二维不确定性的直线的 mcmc 拟合。我在 中很容易地完成了这一点emcee,但pymc给我带来了一些问题。
它本质上归结为使用多元高斯似然。
这是我到目前为止所拥有的。
from pymc3 import *
import numpy as np
import matplotlib.pyplot as plt
size = 200
true_intercept = 1
true_slope = 2
true_x = np.linspace(0, 1, size)
# y = a + b*x
true_regression_line = true_intercept + true_slope * true_x
# add noise
# here the errors are all the same but the real world they are usually not!
std_y, std_x = 0.1, …Run Code Online (Sandbox Code Playgroud) 我知道这个非常古老的问题Python酸洗错误:TypeError:对象pickle没有返回列表.问题与numpy?但唯一给出的答案是相当模糊的.
这是在Python 3.6中重现该问题的代码.
import pickle
from astroquery.irsa import Irsa
from astropy import units as u
# Query region.
table = Irsa.query_region("m31", catalog="fp_psc", spatial="Cone",
radius=.5 * u.arcmin)
# Dump table.
with open('table.pkl', 'wb') as f:
pickle.dump(table, f)
# This is where the issue appears.
with open('table.pkl', 'rb') as f:
table = pickle.load(f)
Run Code Online (Sandbox Code Playgroud)
尝试加载pickle数据时,它失败了:
Traceback (most recent call last):
File "/home/gabriel/Descargas/test.py", line 17, in <module>
table2 = pickle.load(f)
File "/home/gabriel/anaconda3/envs/cat-match/lib/python3.6/site-packages/astropy/table/column.py", line 238, in __setstate__
super_class.__setstate__(self, state)
File "/home/gabriel/anaconda3/envs/cat-match/lib/python3.6/site-packages/numpy/ma/core.py", line 5869, …Run Code Online (Sandbox Code Playgroud) 我有以下非常简单的代码:
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.gridspec as gridspec
x = np.random.randn(60)
y = np.random.randn(60)
z = [np.random.random() for _ in range(60)]
fig = plt.figure()
gs = gridspec.GridSpec(1, 2)
ax0 = plt.subplot(gs[0, 0])
plt.scatter(x, y, s=20)
ax1 = plt.subplot(gs[0, 1])
cm = plt.cm.get_cmap('RdYlBu_r')
plt.scatter(x, y, s=20 ,c=z, cmap=cm, vmin=0, vmax=1)
cbaxes = fig.add_axes([0.6, 0.12, 0.1, 0.02])
plt.colorbar(cax=cbaxes, ticks=[0.,1], orientation='horizontal')
fig.tight_layout()
out_png = '/home/user/image_out.png'
plt.savefig(out_png, dpi=150)
plt.close()
Run Code Online (Sandbox Code Playgroud)
如果我在我的机器上运行它,它会起作用,除了警告:
/usr/local/lib/python2.7/dist-packages/matplotlib/figure.py:1533: UserWarning: This figure includes Axes that are not …Run Code Online (Sandbox Code Playgroud) 我有一个由N子列表组成的主列表(其中这个数字将针对不同的运行而改变),每个列表包含成对的x,y点.我需要一种方法来绘制这些子列表中具有不同颜色的点,从列表中获取(通常)比子列表更少的元素.要做到这一点,我需要一种循环这个颜色列表的方法.这是我所追求的内容的摘录:
# Main list which holds all my N sub-lists.
list_a = [[x,y pairs], [..], [..], [..], ..., [..]]
# Plot sub-lists with colors taken from this list. I need the for block below
# to cycle through this list.
col = ['red', 'darkgreen', 'blue', 'maroon','red']
for i, sub_list in enumerate(list_a):
plt.scatter(sub_list[0], sub_list[1], marker='o', c=col[i])
Run Code Online (Sandbox Code Playgroud)
如果len(col) < len(list_a)(大部分时间都会发生),这将返回错误.因为对于给定的代码运行,子列表的数量会有所不同,我不能将多种颜色硬编码到col列表中,所以我需要一种循环遍历该颜色列表的方法.我怎么能这样做?
我有一个由任意数量的子列表组成的列表(意味着它不是固定的,可以在代码的不同运行中更改)我需要乘以所有子列表的长度并获得最终的数字.
这是一个MWE:
a = [[1.2,5.8,6,3], [1,48,5], [2.,3], [4,7,5.,2,5,3,6,554,6.,6,9], [6,.3,8,45.2,.001]]
n = 1
for sub_lst in a:
n *= len(sub_lst)
print n
Run Code Online (Sandbox Code Playgroud)
这导致1320列表具有4个,3个,2个,11个和5个元素.
是否可以在不诉诸for循环的情况下做到这一点?numpy答案很受欢迎.
我需要for根据调用函数后得到的结果打破循环.这是我所追求的一个例子(显然不起作用):
def break_out(i):
# Some condition
if i > 10:
# This does not work.
return break
for i in range(1000):
# Call function
break_out(i)
Run Code Online (Sandbox Code Playgroud)
当然这很简单 MWE,我的实际功能要大得多,这就是为什么我把它移到for循环之外.
这个答案说这是不可能的,我应该让函数返回一个布尔值并if在for循环内添加一个语句来决定.
因为它是一个相当古老的问题,并没有得到太多的关注(同样,它适用于while循环),我想重新检查这样的事情是否可行.
我需要做一些非常类似于这里问的内容你如何在Python中压缩未知数量的列表?,但在更一般的情况下.
我有以下设置:
a = [['a', '0', 'b', 'f', '78']]
b = [['3', 'w', 'hh', '12', '8']]
c = [['g', '7', '1', 'a0', '9'], ['45', '4', 'fe', 'h', 'k']]
Run Code Online (Sandbox Code Playgroud)
我需要将这些列表压缩在一起以获得:
abc = [['a', '3', 'g', '45'], ['0', 'w', '7', '4'], ['b', 'hh', '1', 'fe'], ['f', '12', 'a0', 'h'], ['78', '8', '9', 'k']]
Run Code Online (Sandbox Code Playgroud)
我可以生成:
zip(a[0], b[0], c[0], c[1])
Run Code Online (Sandbox Code Playgroud)
但是这些列表a,b,c包含许多子列表,这些子列表对于连续运行会有所不同,因此这种扩展它们的"手动"方式将不起作用.
我能得到的最接近的是:
zip(a[0], b[0], *c)
Run Code Online (Sandbox Code Playgroud)
由于*不允许使用除最后一个位置之外的任何其他位置解压缩列表,因此"理想"表达式:
zip(*a, *b, *c)
Run Code Online (Sandbox Code Playgroud)
不起作用.
我怎样才能将一些列表与未知数量的子列表压缩在一起?
我知道如何检查列表是否为空(检查列表是否为空的最佳方法)以及如何检查numpy数组是否为空(如何检查 numpy 数组是否为空?)
我有一个元素,有时可以是列表,有时可以是数组。我需要检查这个元素是否为空,而不事先知道它是哪一个。我可以考虑做
if isinstance(a, list):
if a:
# do something
elif a.any():
# do something
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有一种更Pythonic的方式来做到这一点?
python ×9
list ×3
matplotlib ×2
numpy ×2
arrays ×1
astropy ×1
astroquery ×1
emcee ×1
mcmc ×1
pickle ×1
pyenv ×1
pymc3 ×1
python-2.7 ×1
statistics ×1
ucs ×1
ucs-4 ×1
ucs2 ×1
zip ×1