我有一个等式:
R??V? + R??V? - R??V?
i? = ?????????????????????
R??R? + R??R? + R??R?
Run Code Online (Sandbox Code Playgroud)
已定义,我想将其拆分为仅包含单个变量的因子 - 在本例中为V1和V2.
所以我希望如此
-R? (R? + R?)
i? = V??????????????????????? + V???????????????????????
R??R? + R??R? + R??R? R??R? + R??R? + R??R?
Run Code Online (Sandbox Code Playgroud)
但到目前为止我能做到的最好的是
-R??V? + V??(R? + R?)
i? = ?????????????????????
R??R? + R??R? + R??R?
Run Code Online (Sandbox Code Playgroud)
使用equation.factor(V1,V2).因果或其他方法还有一些其他选项可以进一步分离变量吗?
Numba似乎是加速数字代码执行的绝佳解决方案.但是,当有数组赋值时,Numba似乎比标准Python代码慢.考虑这个例子比较四个替代方案,有/无Numba,写入数组/标量:
(计算保持非常简单,专注于问题,即分配给标量与分配到数组单元格)
@autojit
def fast_sum_arr(arr):
z = arr.copy()
M = len(arr)
for i in range(M):
z[i] += arr[i]
return z
def sum_arr(arr):
z = arr.copy()
M = len(arr)
for i in range(M):
z[i] += arr[i]
return z
@autojit
def fast_sum_sclr(arr):
z = 0
M = len(arr)
for i in range(M):
z += arr[i]
return z
def sum_sclr(arr):
z = 0
M = len(arr)
for i in range(M):
z += arr[i]
return z
Run Code Online (Sandbox Code Playgroud)
使用IPython的%timeit来评估我得到的四个替代方案:
In [125]: %timeit fast_sum_arr(arr)
100 loops, best …Run Code Online (Sandbox Code Playgroud) 我有一个函数foo,它将一个指向内存的指针作为参数,并且对该内存进行写入和读取:
cdef void foo (double *data):
data[some_index_int] = some_value_double
do_something_dependent_on (data)
Run Code Online (Sandbox Code Playgroud)
我data这样分配:
cdef int N = some_int
cdef double *data = <double*> malloc (N * sizeof (double))
cdef int i
for i in cython.parallel.prange (N, nogil=True):
foo (data)
readout (data)
Run Code Online (Sandbox Code Playgroud)
我现在的问题是:不同的线程如何对待这个?我的猜测是指向的内存data将由所有线程共享,并在函数内部"同时"读取或写入foo.这会弄乱所有结果,因为人们不能依赖先前设定的数据值(内部foo)?我的猜测是正确的还是在cython编译器中实现了一些神奇的安全带?
非常感谢你提前.
python malloc parallel-processing cython python-multithreading
如果我想将一个函数逐行(或逐列)应用于ndarray,我是否会看到ufuncs(看起来不像)或某种类型的数组广播(不是我正在寻找的那个?) ?
编辑
我正在寻找类似R的应用功能.例如,
apply(X,1,function(x) x*2)
Run Code Online (Sandbox Code Playgroud)
将通过匿名定义的函数将2乘以X的每一行,但也可以是命名函数.(这当然是一个愚蠢的,人为的例子,apply实际上并不需要).没有通用的方法在NumPy数组的"轴"上应用函数,?
我正在寻找一种简洁的方法:
a = numpy.array([1,4,1,numpy.nan,2,numpy.nan])
Run Code Online (Sandbox Code Playgroud)
至:
b = numpy.array([1,5,6,numpy.nan,8,numpy.nan])
Run Code Online (Sandbox Code Playgroud)
我目前能做的最好的事情是:
b = numpy.insert(numpy.cumsum(a[numpy.isfinite(a)]), (numpy.argwhere(numpy.isnan(a)) - numpy.arange(len(numpy.argwhere(numpy.isnan(a))))), numpy.nan)
Run Code Online (Sandbox Code Playgroud)
是否有更短的方法来实现相同的目标?那么沿着2D阵列的轴做一个cumsum呢?
我有一个情节,我通过scikit-learn中的KMeans算法生成.簇对应于不同的颜色.这是情节,

我需要一个这个图的图例,它对应于图中的簇编号.理想情况下,图例应显示群集的颜色,标签应为群集编号.谢谢.
编辑:我认为我应该放一些代码,因为人们正在贬低这个
from sklearn.cluster import KMeans
km = KMeans(n_clusters=20, init='random')
km.fit(df) #df is the dataframe which contains points as coordinates
labels = km.labels_
plt.clf()
fig = plt.figure()
ax = fig.add_subplot(111, axisbg='w', frame_on=True)
fig.set_size_inches(18.5, 10.5)
# Plot the clusters on the map
# m is a basemap object
m.scatter(
[geom.x for geom in map_points],
[geom.y for geom in map_points],
20, marker='o', lw=.25,
c = labels.astype(float),
alpha =0.9, antialiased=True,
zorder=3)
m.fillcontinents(color='#555555')
plt.show()
Run Code Online (Sandbox Code Playgroud) 我试图在matplotlib图上放一些带背景的文字,文字和背景都是透明的.以下代码
import numpy as np
import matplotlib.pyplot as plt
plt.figure()
ax = plt.subplot(111)
plt.plot(np.linspace(1,0,1000))
t = plt.text(0.03,.95,'text',transform=ax.transAxes,backgroundcolor='0.75',alpha=.5)
plt.show()
Run Code Online (Sandbox Code Playgroud)
使文本相对于文本的背景是半透明的,但背景相对于它在图中模糊的线条完全不透明.
t.figure.set_alpha(.5)
Run Code Online (Sandbox Code Playgroud)
和
t.figure.patch.set_alpha(.5)
Run Code Online (Sandbox Code Playgroud)
也不做伎俩.
我有1D NumPy数组如下:
import numpy as np
d = np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20])
Run Code Online (Sandbox Code Playgroud)
我想计算(1,2,6,7),(3,4,8,9)等的平均值.这涉及4个元素的平均值:两个连续元素和两个连续元素后面的5个位置.
我尝试了以下方法:
>> import scipy.ndimage.filters as filt
>> res = filt.uniform_filter(d,size=4)
>> print res
[ 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
Run Code Online (Sandbox Code Playgroud)
遗憾的是,这并没有给我预期的结果.我该怎么做?
这里有长期的R和Python用户.我使用R进行日常数据分析,使用Python进行文本处理和shell脚本更重的任务.我正在处理越来越大的数据集,当我得到它们时,这些文件通常是二进制文件或文本文件.我通常做的事情类型是在大多数情况下应用统计/机器学习算法并创建统计图形.我有时使用R和SQLite,并为迭代密集型任务编写C语言; 在研究Hadoop之前,我正在考虑在NumPy/Scipy上投入一些时间,因为我听说它有更好的内存管理[并且我的背景转换为Numpy/Scipy看起来并不那么大] - 我想知道是否有人有经验使用这两个,并可以评论这方面的改进,如果Numpy中有成语来处理这个问题.(一世' 我也知道Rpy2,但想知道Numpy/Scipy能否满足我的大部分需求).谢谢 -
我正在使用matplotlib.pyplot.annotate在我的情节上绘制一个箭头,如下所示:
import matplotlib.pyplot as plt
plt.annotate("",(x,ybottom),(x,ytop),arrowprops=dict(arrowstyle="->"))
Run Code Online (Sandbox Code Playgroud)
我想使用箭头样式,一端是扁平线,另一端是箭头,所以组合样式"| - |" 和" - >"做一些我们称之为"| - >"的东西,但我无法弄清楚如何定义自己的风格.
我想我可能会尝试类似的东西
import matplotlib.patches as patches
myarrow = patches.ArrowStyle("Fancy", head_length=0.4,head_width=0.2)
Run Code Online (Sandbox Code Playgroud)
(现在应该与" - >"相同;我可以稍后调整样式)但是如何告诉plt.annotate使用myarrow作为样式?plt.annotate没有arrowstyle属性,而arrowprops = dict(arrowstyle = myarrow)也不起作用.
我也尝试在arrowprops字典中定义它,例如
plt.annotate("",(x,ybottom),(x,ytop),arrowprops=dict(head_length=0.4,head_width=0.2))
Run Code Online (Sandbox Code Playgroud)
但这给了我关于没有属性'set_head_width'的错误.
那么,我如何定义自己的pyplot.annotate样式呢?