小编spo*_*nce的帖子

交换numpy数组的尺寸

我想做以下事情:

for i in dimension1:
  for j in dimension2:
    for k in dimension3:
      for l in dimension4:
        B[k,l,i,j] = A[i,j,k,l]
Run Code Online (Sandbox Code Playgroud)

不使用循环.最后,A和B包含相同的信息,但索引不同.

我必须指出尺寸1,2,3和4可以相同或不同.所以numpy.reshape()似乎很难.

python arrays optimization numpy dimensions

30
推荐指数
4
解决办法
2万
查看次数

使用python进行并行数值积分

我想在python中使用多个cpus在数字上集成一个函数.我想做的事情如下:

from scipy.integrate import quad
import multiprocessing
def FanDDW(arguments):
  wtq,eigq_files,DDB_files,EIGR2D_files,FAN_files = arguments
  ...
  return tot_corr

# Numerical integration
def integration(frequency):
# Parallelize the work over cpus
  pool = multiprocessing.Pool(processes=nb_cpus)
  total = pool.map(FanDDW, zip(wtq,eigq_files,DDB_files,EIGR2D_files,FAN_files))
  FanDDW_corr = sum(total)
  return quad(FanDDW, -Inf, Inf, args=(zip(wtq,eigq_files,DDB_files,EIGR2D_files,FAN_files)))[0]

vec_functionint = vectorize(integration)
vec_functionint(3,arange(1.0,4.0,0.5))
Run Code Online (Sandbox Code Playgroud)

"频率"也是一个全局变量(FanDDW(参数)外部).它是一个包含必须计算函数的位置的向量.我想四元组应该以聪明的方式选择频率.如何将它传递给FanDDW,知道它不应该在CPU之间分配,并且pool.map正是这样做的(这就是为什么我把它作为全局变量并且没有将它作为参数传递给定义的原因).

感谢您的任何帮助.

塞缪尔.

python multiprocessing scipy numerical-integration

7
推荐指数
1
解决办法
894
查看次数

在python中使用matplotlib的胖带

我想在 python 中使用 matplotlib 绘制一条粗细不同的线。

更清楚地说,我有以下变量

import matplotlib.pyplot as P 
import numpy as N

x_value = N.arange(0,10,1)
y_value = N.random.rand(10)
bandwidth = N.random.rand(10)*10
P.plot(x_value,y_value,bandwidth)
Run Code Online (Sandbox Code Playgroud)

我想用 x_value 和 y_value 绘制一条线,厚度随 x_value 位置变化并由带宽向量给出。

我看到的一个可能的解决方案是绘制上下线(即我取 y_value[index] +-bandwidth[index]/2 并绘制这两条线。

然后我可以尝试填充两行之间的空间(如何?)

如果你有什么建议?

谢谢,

塞缪尔。

python physics numpy matplotlib thickness

3
推荐指数
1
解决办法
3402
查看次数

python 中带有 gridspec.GridSpec 的变量 wspace

我想在 matplotlib 中使用 GridSpec 创建一个变量(两个不同的)wspace。

我想实现以下目标: 目标

到目前为止我正在使用以下内容:

gs1 = gridspec.GridSpec(6, 3, width_ratios=[1.5,1,1])
gs1.update(wspace=0.4, hspace=0.3)
ax1 = fig.add_subplot(gs1[0:2,0])
ax2 = fig.add_subplot(gs1[2:4,0])
ax3 = fig.add_subplot(gs1[4:6,0])
ax4 = fig.add_subplot(gs1[0:3,1])
ax5 = fig.add_subplot(gs1[3:6,1])
ax6 = fig.add_subplot(gs1[0:3,2])
ax7 = fig.add_subplot(gs1[3:6,2])
Run Code Online (Sandbox Code Playgroud)

知道如何在我令人惊叹的手绘图中获得以绿色突出显示的两个不同空间吗?

多谢 !

山姆

python matplotlib

3
推荐指数
1
解决办法
1217
查看次数

如何使用多个参数并行化一个简单的 python def

我想并行化一个 python 脚本。我已经创建了一个定义:

def dummy(list1,list2):
  do usefull calculations ...
Run Code Online (Sandbox Code Playgroud)

list1 和 list2 包含我应该阅读的文件名列表,然后用它们进行计算。文件是独立的。list1 和 2 包含相同数量的参数。

让我们假设我有 2 个 cpus(我想强加要使用的 cpus 数量)。我希望第一个 cpu 使用仅包含 list1 和 list2 的前半部分的列表调用定义,同时第二个 cpu 应该使用 list1 和 list2 的后半部分调用相同的 def dummy。

就像是:

import multiprocessing
nb_cpus = 2
pool = multiprocessing.Pool(processes=nb_cpus)
for ii in nb_cpus:
  list_half1 = list1[0:max/nb_cpus]
  list_half2 = list2[0:max/nb_cpus]
  result[ii] = pool.map(dummy,list_half1,list_half2)
Run Code Online (Sandbox Code Playgroud)

问题是 pool.map 只能在 def 有 1 个参数并且我不能循环 CPU 时才能工作。

感谢您对这个问题的任何帮助!

PS:我不可能将两个参数连接成一个,因为在实际情况下,我要传递更多的参数。

python parallel-processing multiprocessing

2
推荐指数
1
解决办法
4965
查看次数

python中的不均匀子图

用以下捕获在python中创建(3,3)子图矩阵的最佳方法是什么:

  • 第一列包含3个子图
  • 第二列包含3个子图
  • 第三列包含2个子图

最后两个子图的大小应相等。这意味着它们将在其他两列的中间图的中间相遇。

我尝试使用gridspec进行此操作,但到目前为止还没有解决。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import gridspec

# generate some data
x = np.arange(0, 10, 0.2)
y = np.sin(x)

# plot it
fig = plt.figure(figsize=(8, 6))

gs = gridspec.GridSpec(3, 3)

ax0 = plt.subplot(gs[0])
ax0.plot(x, y)
ax1 = plt.subplot(gs[1])
ax1.plot(y, x)

ax3 = plt.subplot(gs[3])
ax3.plot(y, x)
ax4 = plt.subplot(gs[4])
ax4.plot(y, x)

ax6 = plt.subplot(gs[6])
ax6.plot(y, x)
ax7 = plt.subplot(gs[7])
ax7.plot(y, x)

plt.tight_layout()
plt.savefig('grid_figure.png')

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

python matplotlib subplot

2
推荐指数
3
解决办法
2408
查看次数