我需要反转一个大的,密集的矩阵,我希望使用Scipy gmres来做.幸运的是,密集矩阵A遵循模式,我不需要将矩阵存储在内存中.在LinearOperator类允许我们构建其用作基质GMRES一个对象,并可以直接计算矩阵矢量乘积A*v.也就是说,我们编写一个函数mv(v),它将向量作为输入v并返回mv(v) = A*v.然后,我们可以使用LinearOperator该类来创建A_LinOp = LinearOperator(shape = shape, matvec = mv).我们可以将线性运算符放入Scipy gmres命令中来评估矩阵向量积,而无需完全加载A到内存中.
该文档可在LinearOperator此处找到:LinearOperator文档.
这是我的问题:编写例程来计算矩阵向量积mv(v) = A*v,我需要另一个输入向量C.条目A是表格A[i,j] = f(C[i] - C[j]).所以,我真正想要的是mv两个输入,一个固定矢量输入C和一个v我们想要计算的变量输入A*v.
MATLAB具有类似的设置,其中将写入x = gmres(@(v) mv(v,C),b)在那里b是问题的右手侧Ax = b,并且mv是取作为变量输入的功能v,我们需要计算A*v和C …
如果我只想使用一次file对象,通常我会在完成后仍然使用with块或显式关闭file对象,因为关闭文件似乎是正确的事情:
with open('filename','r') as f:
x = dosomething(f)
Run Code Online (Sandbox Code Playgroud)
要么
f = open('filename','r')
x = dosomething(f)
f.close()
Run Code Online (Sandbox Code Playgroud)
但是,我看到人们使用将调用open直接传递给函数而不将输出保存到任何变量,从而无法显式关闭:
x = dosomething(open('filename','r'))
Run Code Online (Sandbox Code Playgroud)
所以,这些都是真的,
或者这是一种不好的做法?
另外,如果我允许文件读/写,答案是否会改变?
要清楚,dosomething可能是np.array()或类似的东西for i in f.readlines()
以下是我的插值输入:
x = [-1.01, 5.66, 5.69, 13.77, 20.89]
y = [0.28773, 1.036889, 1.043178, 1.595322, 1.543763]
new_x = [0, 2, 4, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20]
Run Code Online (Sandbox Code Playgroud)
从结果matlab interp1和scipy.interpolate interp1d不同。
结果是这样的。
new_y_scipy=[0.401171, 0.625806, 0.850442, 1.062384, 1.186291, 1.248244, 1.310198, 1.372152, 1.434105, 1.496059, 1.545429, 1.55267, 1.559911, 1.567153, 1.574394, 1.588877,]
new_y_matlab=[0.401171, 0.625806, 0.850442, 1.064362, 1.201031, 1.269366, 1.3377, 1.406035, 1.47437, 1.542704, 1.593656, 1.586415, 1.579174, 1.571932, 1.564691, 1.550208]
Run Code Online (Sandbox Code Playgroud)
显然matlab似乎比更好的结果scipy。基本区别是什么?
如何根据索引公式"雕刻"或掩盖2D numpy数组?我不关心元素值是什么,只关心它在数组中的位置.
例如,给定一个mxm数组,如何提取地址符合的所有元素
for i in range(0,m):
for j in range(0,m):
if j-i-k>=0:
A[i,j] = 1
elif j-p-k>=0:
A[i,j] = 1
elif i-k>=0:
A[i,j] = 1
else:
A[i,j] = 0
j=j+1
i=i+1
Run Code Online (Sandbox Code Playgroud)
哪里
k和p是任意围栏
假设
k<m
p<m
Run Code Online (Sandbox Code Playgroud)
这最终看起来像对角切片+水平切片+垂直切片.可以在没有上面的for循环的情况下完成吗?
我已经能够使用client.programmaticlogingdata下载包中的示例/电子表格,使用gdata python 函数登录Google电子表格.
现在我无法登录我的企业gapps'me@mycompany.com'我是否必须通过任何其他武器?我试过帐户类型托管没有工作.
我尝试oath2从gui 创建密钥,我生成了客户端ID和电子邮件ID.在gdata中运行oauth示例会询问consumerkey和secret密钥.有人可以就此提出建议吗?
我在python中有一个带日期(日期时间)的向量.如何根据此向量上的出现情况绘制15分钟的柱状图?
这是我做的:
StartTime = []
for b in myEvents:
StartTime.append(b['logDate'].time())
Run Code Online (Sandbox Code Playgroud)
如您所见,我将日期转换为时间.(我从mongoDB查询中获取myEvents)
fig2 = plt.figure()
ax = fig2.add_subplot(111)
ax.grid(True,which='both')
ax.hist(StartTime,100)
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
TypeError: can't compare datetime.time to float
Run Code Online (Sandbox Code Playgroud)
我理解错误,但我无法弄清楚如何解决它.
非常感谢您的帮助
我有4个2D numpy数组,称为a, b, c, d每个数组由n行和m列组成.我需要做的是给每个元素b和d一个如下计算的值(伪代码):
min_coords = min_of_neighbors_coords(x, y)
b[x,y] = a[x,y] * a[min_coords];
d[x,y] = c[min_coords];
Run Code Online (Sandbox Code Playgroud)
min_of_neighbors_coords给定数组元素坐标的函数在哪里返回具有较低值的'neighbor'元素的坐标.即,考虑到阵列:
1, 2, 5
3, 7, 2
2, 3, 6
Run Code Online (Sandbox Code Playgroud)
min_of_neighbors_coords(1, 1)将引用具有值的中心元素7,并将返回元组(0, 0):数字的坐标1.
我设法使用for循环(每个元素的元素),但算法非常慢,我正在寻找一种方法来改进它,避免循环,并要求计算numpy.
可能吗?
在R中,有一个函数(cm.rnorm.cor来自包CreditMetrics),它采用样本量,变量数量和相关矩阵来创建相关数据.
Python中有相应的东西吗?
什么是存储多于2维的数组(ndim > 2)到文件并使用np.savetxt和以相同的格式(维度)检索它的通用方法是什么np.loadtxt?
我担心的是,如果我在存储时给出任何分隔符,我是否需要在检索时给予一些处理?再加上浮动并以相同的格式检索它并不是一件小事.
我在文档中看到了很多简单的例子.我只是想知道是否np.savetxt(filename, array)可以简单地检索最简单的存储array = np.loadtxt(filename).
是否有一种简单可靠的方法来确定axes其方面设置'auto'为何时的当前宽高比?
要检查的显而易见的事情是ax.get_aspect(),但这只是回归'auto'.我可以将它设置为任意常量值ax.set_aspect(aspect),之后返回相同的常量ax.get_aspect().默认情况下(非常有用)我们有aspect = 'auto',在这种情况下,自动计算和调整宽高比以匹配数据限制和轴大小.
如何获得自动选择的数字宽高比?
为了澄清,这既不是返回的数据限制ax.get_data_ratio()的宽高比,也不是由(图中)返回的图形或子图的显示尺寸的宽高比fig.get_figheight() / fig.get_figwidth().它有点微妙,因为它取决于显示尺寸和数据限制.(这可能导致混淆不同的比率,以及我认为让它易于访问很重要的原因.)