小编wfl*_*nny的帖子

将4d numpy数组重塑为2d数组,同时保留数组位置

我有一个4维numpy形状的阵列(N, N, Q, Q).所以给定一个行和列索引(i, j),mat[i,j]是一个QxQ矩阵.我想重塑这个数组来塑造(N*Q, N*Q)这样的形状

array([[[[ 0,  1],
         [ 2,  3]],

        [[ 4,  5],
         [ 6,  7]]],


       [[[ 8,  9],
         [10, 11]],

        [[12, 13],
         [14, 15]]]])
Run Code Online (Sandbox Code Playgroud)

array([[  0.,   1.,   4.,   5.],
       [  2.,   3.,   6.,   7.],
       [  8.,   9.,  12.,  13.],
       [ 10.,  11.,  14.,  15.]])
Run Code Online (Sandbox Code Playgroud)

你可以看到这mat[0,0]一点new_mat[0:2, 0:2].目前mat.reshape(N*Q, N*Q)需要mat[0,0]new_mat[0:4, 0](这是我不想要的东西).我如何使用reshape或rollaxis或类似的东西来重塑这个数组?我最终想用它绘图imshow,目前卡住了.我觉得很容易做到,我还没想出来.

python numpy

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

迭代numpy数组列的所有成对组合

我有一个大小的numpy数组

arr.size = (200, 600, 20). 
Run Code Online (Sandbox Code Playgroud)

我想计算scipy.stats.kendalltau最后两个维度的每个成对组合.例如:

kendalltau(arr[:, 0, 0], arr[:, 1, 0])
kendalltau(arr[:, 0, 0], arr[:, 1, 1])
kendalltau(arr[:, 0, 0], arr[:, 1, 2])
...
kendalltau(arr[:, 0, 0], arr[:, 2, 0])
kendalltau(arr[:, 0, 0], arr[:, 2, 1])
kendalltau(arr[:, 0, 0], arr[:, 2, 2])
...
...
kendalltau(arr[:, 598, 20], arr[:, 599, 20])
Run Code Online (Sandbox Code Playgroud)

这样,我涵盖的所有组合arr[:, i, xi]arr[:, j, xj]i < jxi in [0,20),xj in [0, 20).这是(600 choose 2) * …

python arrays statistics numpy

6
推荐指数
1
解决办法
6116
查看次数

Python:如何在省略注释的同时从属性文件创建字典

我已经在这里寻找了一段时间的答案并且没有找到它,所以希望这不是一个骗局.

我有一个属性文件,主要包含键=值对,但也包含#comments.我需要将它放在字典中,这样我就可以随意获取值.在没有#comments的文件中,以下工作完美.

myprops = dict(line.strip().split('=') for line in open('/Path/filename.properties'))
print myprops['key']
Run Code Online (Sandbox Code Playgroud)

但是当有评论出现时却不是这样.如果#comment存在,字典说

"ValueError: dictionary update sequence element #x has length 1, 2 is required"
Run Code Online (Sandbox Code Playgroud)

我试过用条件包装字典创建

if not line.startswith('#'):
Run Code Online (Sandbox Code Playgroud)

但我似乎无法让它发挥作用.建议?谢谢!

python dictionary properties-file

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

如何在numpy python中创建相似度矩阵?

我有以下形式的文件中的数据:

user_id, item_id, rating
1, abc,5
1, abcd,3
2, abc, 3
2, fgh, 5
Run Code Online (Sandbox Code Playgroud)

因此,我想为上述数据形成的矩阵如下:

#   itemd_ids
# abc  abcd  fgh
[[5,    3,    0]  # user_id 1
 [3,    0,    5]] # user_id 2
Run Code Online (Sandbox Code Playgroud)

丢失数据替换为0.

但是从这里我想创建用户到用户的相似度矩阵和项目到项目的相似性矩阵?

我怎么做?

python numpy machine-learning matrix

5
推荐指数
1
解决办法
8084
查看次数

Matplotlib 图例 LaTeX 文本的多行对齐

以下代码产生下图:

import numpy as np
import matplotlib.pyplot as plt

xs = np.random.rand(100)
ys = np.random.rand(100)
r, p = 0.930, 1e-5
label = '$T_m$\n$\\rho = %.3f, p = %.1e$'%(r, p)

fig, ax = plt.subplots()
ax.scatter(xs, ys, label=label)
ax.legend()
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我希望图例文本居中,即'$T_m$'在第一行居中。我尝试过使用str.format迷你语言来处理各种事情,例如

label = '{0:{x}^25}\n{1:.3f}, {2:.1e}'.format('$T_m$', r, p, x=' ')
Run Code Online (Sandbox Code Playgroud)

我认为这会起作用,因为以下给出

>>> print ax.get_legend_handles_labels()
([<matplotlib.collections.PathCollection object at 0x7fa099286590>],
 [u'     $\\Delta T_{m}$      \n$\\rho=0.930, p=1.2 \\times 10^{-5}$'])
Run Code Online (Sandbox Code Playgroud)

但标签中的空白被删除。我不能使用任何乳胶空格('\;''\\mbox{}')作为填充字符,因为它们是多个字符。我还尝试在各个地方使用multialignment='center'关键字,但它不是有效的 kwarg ax.legend

如何在图例文本中获得居中的多行对齐方式? 最终,我将使用几个图例句柄,其中标签文本可以在第二行中包含更多字符(如此处所示)或在第一行中包含更多字符(与此处所示相反)。

我正在使用 …

python matplotlib

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

开源科学项目 - 使用Python 2.6还是2.7?

关于是否使用2.x或3.x,我已经看过其他几个主题.但是,其中大部分至少有两年的历史,不区分2.6和2.7.

我正在重新启动一个我最终可能要在2013年之前发布的科学项目.我在标准的2.6+模块(如itertools)中使用了numpy,scipy和pylab.哪个版本,2.6或2.7,会更好?

这也将清除在制作脚本时是否使用optparse.

编辑:我在大学工作,我拿起的工作站有Python 2.4.2.6到2.7之间的选择决定了要升级到哪个发行版.感谢您的建议!

python numpy version optparse scipy

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

Python:遍历字符串列表并使用 split()

我正在尝试拆分列表的元素:

text = ['James Fennimore Cooper\n', 'Peter, Paul, and Mary\n',
        'James Gosling\n']

newlist = ['James', 'Fennimore', 'Cooper\n', 'Peter', 'Paul,', 'and', 'Mary\n',
        'James', 'Gosling\n']
Run Code Online (Sandbox Code Playgroud)

到目前为止我的代码是:

newlist = []

for item in text:
    newlist.extend(item.split())

return newlist
Run Code Online (Sandbox Code Playgroud)

我得到错误:

builtins.AttributeError: 'list' object has no attribute 'split'

python string split loops list

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

为什么 numpy.all 比 python 标准 all 慢得多?

我编写了一个脚本来对我们的本地集群进行一些排名顺序相关计算。计算涉及寻找两个阵列,XY长度5000-10000的,并提取量

all((X[i], Y[i]))
all((X[i], not Y[i]))
all((not X[i], Y[i]))
Run Code Online (Sandbox Code Playgroud)

数千次计算(因为我洗牌X/Y除其他外)。

我们的一个集群运行的是 python2.4,所以我将alls更改为numpy.alls。然而,我估计需要大约 5-6 小时的计算达到了 24 小时以上。这让我进行了调查。

下面是一些示例代码:

In [2]: import timeit
In [3]: s = """import numpy as np
   ...: x, y = np.random.rand(1000), np.random.rand(1000)
   ...: [all((x[i], y[i])) for i in range(1000)]
   ...: """
In [4]: timeit.timeit(s, number=1000)
Out[4]: 0.39837288856506348

In [5]: s_numpy = """import numpy as np
   ...: x, y = np.random.rand(1000), np.random.rand(1000)
   ...: [np.all((x[i], y[i])) for …
Run Code Online (Sandbox Code Playgroud)

python numpy timeit

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