小编Cup*_*tor的帖子

从 Numpy 数组的索引中采样的有效方法?

我想从 2D Numpy 数组的索引中采样,考虑到每个索引都由该数组内的数字加权。numpy.random.choice然而,我知道它的方式不返回索引,而是返回数字本身。有什么有效的方法吗?

这是我的代码:

import numpy as np
A=np.arange(1,10).reshape(3,3)
A_flat=A.flatten()
d=np.random.choice(A_flat,size=10,p=A_flat/float(np.sum(A_flat)))
print d
Run Code Online (Sandbox Code Playgroud)

python random numpy sampling

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

Matplotlib:制作具有透明最外层的 2D 高斯轮廓

所以我使用matplotlib Cookbook生成以下灰度高斯轮廓:

import numpy as np
from scipy.interpolate import griddata
import matplotlib.pyplot as plt
import numpy.ma as ma
from numpy.random import uniform, seed
from matplotlib import cm
def gauss(x,y,Sigma,mu):
    X=np.vstack((x,y)).T
    mat_multi=np.dot((X-mu[None,...]).dot(np.linalg.inv(Sigma)),(X-mu[None,...]).T)
    return  np.diag(np.exp(-1*(mat_multi)))

def plot_countour(x,y,z):
    # define grid.
    xi = np.linspace(-2.1,2.1,100)
    yi = np.linspace(-2.1,2.1,100)
    ## grid the data.
    zi = griddata((x, y), z, (xi[None,:], yi[:,None]), method='cubic')
    # contour the gridded data, plotting dots at the randomly spaced data points.
    CS = plt.contour(xi,yi,zi,6,linewidths=0.5,colors='k')
    #CS = plt.contourf(xi,yi,zi,15,cmap=plt.cm.jet)
    CS = plt.contourf(xi,yi,zi,6,cmap=cm.Greys_r) …
Run Code Online (Sandbox Code Playgroud)

python plot matplotlib

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

两个子图的单个颜色条可更改其中一个子图的大小

我试图在这里这里主要使用代码colorbar为两个添加一个。matshow

我的代码如下,但是问题是颜色条会缓和右侧图的大小。我该如何预防?

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
# Generate some data that where each slice has a different range
# (The overall range is from 0 to 2)
data = np.random.random((2,10,10))
data *= np.array([1.5, 2.0])[:,None,None]

# Plot each slice as an independent subplot
fig, axes = plt.subplots(nrows=1, ncols=2)
for dat, ax in zip(data, axes.flat):
    # The vmin and vmax arguments specify the color limits
    im = …
Run Code Online (Sandbox Code Playgroud)

python matplotlib

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

通过修复参数来限制功能

如何通过修复它的参数来创建比原始维度更小的维度的函数:

例如,我想用sum函数制作后继函数,如下所示:

def add(x,y):
    return x+y
Run Code Online (Sandbox Code Playgroud)

现在我正在寻找这样的东西:

g = f(〜,1),它将是后继函数,即g(x)= x + 1.

python function bayesian-networks argument-passing belief-propagation

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

将数组展平仅一层?

是否有任何内置的numpy函数可以得到:

a=np.asarray([[[1,2],[3,4]],[[1,2],[3,4]]])
Run Code Online (Sandbox Code Playgroud)

并会回来:

b=[[1,2],[3,4],[1,2],[3,4]]
Run Code Online (Sandbox Code Playgroud)

?像一层扁平化的东西.

PS我正在寻找一个矢量化选项,否则这个哑代码可用:

flat1D(a):
   b=np.array([])
   for item in a:
      b=np.append(b,item)
   return b
Run Code Online (Sandbox Code Playgroud)

python arrays numpy

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

获取索引映射的数组的子数组的有效方法

我有一个矩阵说a.我需要得到它的一个子矩阵,基本上它的索引来自主矩阵索引的映射(这个映射不一定是1-1).我有以下代码来生成子矩阵,这里映射被认为是sum.

import numpy as np
def transform(A):
    B=np.zeros(A.flatten().shape[0])
    for i in range(A.flatten().shape[0]):
        multi_idx=np.unravel_index(i,A.shape)
        B[np.sum(multi_idx)]=A[multi_idx] #the mapping applied on the indices: B[np.sum(multi_idx)]
    return B       
A=np.arange(27).reshape([3,3,3])
print A
print transform(A)        
Run Code Online (Sandbox Code Playgroud)

随着输出:

[[[ 0  1  2]
  [ 3  4  5]
  [ 6  7  8]]

 [[ 9 10 11]
  [12 13 14]
  [15 16 17]]

 [[18 19 20]
  [21 22 23]
  [24 25 26]]]
[  0.   9.  18.  21.  24.  25.  26.   0.   0.   0.   0.   0.   0.   0.   0. …
Run Code Online (Sandbox Code Playgroud)

python arrays numpy matrix

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

`numpy.einsum`是如何工作的?

根据爱因斯坦求和来编写求和的正确方法对我来说是一个难题,所以我想在我的代码中尝试它.我在一些案例中取得了成功,但大多数都是经过反复试验.

现在有一个我无法弄清楚的案例.首先,一个基本问题.对于两个矩阵ABNx11xN分别,ABNxNBA1x1.当我想NxNnp.einsum我可以做的计算案例时:

import numpy as np

a = np.asarray([[1,2]])
b = np.asarray([[2,3]])
print np.einsum('ij,ji->ij', a, b)
Run Code Online (Sandbox Code Playgroud)

最后一个数组是2x2.然而

a = np.asarray([[1,2]])
b = np.asarray([[2,3]])
print np.einsum('ij,ij->ij', a, b)
Run Code Online (Sandbox Code Playgroud)

返回一个1x2数组.我不太明白为什么这不能给出正确的结果.例如,对于上述案例numpy的指南说,箭头可用于强制求和或阻止它发生.但这对我来说似乎很模糊; 在上面的例子中,我不明白numpy如何根据索引的顺序(显然发生变化)决定输出数组的最终大小.

形式上我知道如下:当箭头右侧没有任何内容时,可以用数学方式将求和写为$\sum\limits_ {i = 0} ^ {N}\sum\limits_ {j = 0} ^ { M} A_ {ij} B_ {ij} $ for np.einsum('ij,ij',A,B),但是当有箭头时,我无法用正式的数学表达式来解释它.

python arrays numpy

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

计算列范数作为矩阵中的向量

我正在寻找将列的范数作为矩阵中的向量计算的最佳方法。我现在的代码是这样的,但是我确信它可以变得更好(也许是numpy?):

import numpy as np
def norm(a):
    ret=np.zeros(a.shape[1])
    for i in range(a.shape[1]):
        ret[i]=np.linalg.norm(a[:,i])
    return ret

a=np.array([[1,3],[2,4]])
print norm(a)
Run Code Online (Sandbox Code Playgroud)

哪个返回:

[ 2.23606798  5.        ]
Run Code Online (Sandbox Code Playgroud)

谢谢。

python numpy linear-algebra matrix-multiplication

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

python 中函数参数中的相等是什么意思?

这是这里的代码示例:

函数参数赋值中的相等意味着什么?像N=20000这儿?N这和简单地作为论证有什么区别?导入随机数、数学

def gibbs(N=20000,thin=500):
   x=0
   y=0
   samples = []
   for i in range(N):
       for j in range(thin):
           x=random.gammavariate(3,1.0/(y*y+4))
           y=random.gauss(1.0/(x+1),1.0/math.sqrt(x+1))
       samples.append((x,y))
   return samples

smp = gibbs()
Run Code Online (Sandbox Code Playgroud)

python syntax arguments function definition

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

如何使用 __init__() 初始化类变量?

据我了解,类属性在某种意义上可以用作 Python 的静态变量。我有一个类,我想在第一次运行期间设置这个静态变量__init__(),即在创建第一个对象时并保持这样。不是每次都更新。我应该怎么做?即使设置标志也无济于事。

class A():
    foo=None
    foo_set_flag=False
    def __init__(self,arg_foo):
        if not self.foo_set_flag:
            self.foo=arg_foo
            foo_set_flag=True
a=A(12)
b=A(13)
print a.foo
print b.foo
Run Code Online (Sandbox Code Playgroud)

这使:

12
13
Run Code Online (Sandbox Code Playgroud)

当然我期待

12
12
Run Code Online (Sandbox Code Playgroud)

python oop class

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