小编JEq*_*hua的帖子

Matlab与Python:重塑

所以我发现了这个:

转换MATLAB代码时,可能需要首先将矩阵重新整形为线性序列,执行一些索引操作,然后重新整形.由于重塑(通常)会在同一存储上生成视图,因此应该可以相当有效地执行此操作.

请注意,Numpy中reshape使用的扫描顺序默认为'C'顺序,而MATLAB使用Fortran顺序.如果您只是简单地转换为线性序列,那么这无关紧要.但是如果要从依赖于扫描顺序的MATLAB代码转换重构,那么这个MATLAB代码:

z = reshape(x,3,4);
Run Code Online (Sandbox Code Playgroud)

应该成为

z = x.reshape(3,4,order='F').copy()
Run Code Online (Sandbox Code Playgroud)

在Numpy.

mafs当我在MATLAB中执行时,我有一个多维16*2数组:

mafs2 = reshape(mafs,[4,4,2]) 
Run Code Online (Sandbox Code Playgroud)

我得到的东西不同于我在python中做的事情:

mafs2 = reshape(mafs,(4,4,2))
Run Code Online (Sandbox Code Playgroud)

甚至

mafs2 = mafs.reshape((4,4,2),order='F').copy()
Run Code Online (Sandbox Code Playgroud)

对此有何帮助?谢谢你们.

python matlab numpy matrix scipy

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

scipys ndimage过滤器的"反射"模式究竟是如何工作的?

我无法准确理解反射模式如何处理我的数组.我有这个非常简单的数组:

import numpy as np
from scipy.ndimage.filters import uniform_filter
from scipy.ndimage.filters import median_filter

vector = np.array([[1.0,1.0,1.0,1.0,1.0],[2.0,2.0,2.0,2.0,2.0],[4.0,4.0,4.0,4.0,4.0],[5.0,5.0,5.0,5.0,5.0]])

print(vector)
Run Code Online (Sandbox Code Playgroud)

[[1. 1. 1. 1. 1.] [2. 2. 2. 2. 2.] [4. 4. 4. 4. 4.] [5. 5. 5. 5. 5.]]

应用窗口大小为3的均匀(平均)过滤器,我得到以下结果:

filtered = uniform_filter(vector, 3, mode='reflect')

print(filtered)
Run Code Online (Sandbox Code Playgroud)

[[1.33333333 1.33333333 1.33333333 1.33333333 1.33333333] [2.33333333 2.33333333 2.33333333 2.33333333 2.33333333] [3.66666667 3.66666667 3.66666667 3.66666667 3.66666667] [4.66666667 4.66666667 4.66666667 4.66666667 4.66666667]]

如果我尝试手动复制练习,我可以得到这个结果.原始矩阵为绿色,窗口为橙色,结果为黄色.白色是"反映"的观察结果.

在此输入图像描述

结果是:

在此输入图像描述

但是当我尝试4或5的窗口大小时,我无法复制结果.

filtered = uniform_filter(vector, 4, mode='reflect')

print(filtered)
Run Code Online (Sandbox Code Playgroud)

[[1.5 1.5 1.5 1.5 1.5] [2. 2. …

python filtering image-processing scipy

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

在python中加速逐元素的数组乘法

我一直在玩numba和numexpr试图加速一个简单的元素矩阵乘法.我无法获得更好的结果,它们基本上(速度方向)等同于numpys乘法函数.这个地区有人有运气吗?我使用numba和numexpr是错误的(我对此很新)或者这是一个不好的方法来尝试加快速度.这是一个可重现的代码,谢谢你的高级:

import numpy as np
from numba import autojit
import numexpr as ne

a=np.random.rand(10,5000000)

# numpy
multiplication1 = np.multiply(a,a)

# numba
def multiplix(X,Y):
    M = X.shape[0]
    N = X.shape[1]
    D = np.empty((M, N), dtype=np.float)
    for i in range(M):
        for j in range(N):
            D[i,j] = X[i, j] * Y[i, j]
    return D

mul = autojit(multiplix)
multiplication2 = mul(a,a)

# numexpr
def numexprmult(X,Y):
    M = X.shape[0]
    N = X.shape[1]
    return ne.evaluate("X * Y")

multiplication3 = numexprmult(a,a) 
Run Code Online (Sandbox Code Playgroud)

performance numpy matrix-multiplication python-2.7 numba

13
推荐指数
2
解决办法
5842
查看次数

使用scipys generic_filter实现"峰度过滤器"

我有一个5000*5000numpy数组,我想要计算大小为25的窗口的Kurtosis.我尝试将scipys自己的kurtosis功能放入generic_filter发现中,ndimage.filters如下所示:

import numpy as np

from scipy.stats import kurtosis
from scipy.ndimage.filters import generic_filter

mat = np.random.random_sample((5000, 5000))

kurtosis_filter = generic_filter(mat, kurtosis, size=25, mode='reflect') 
Run Code Online (Sandbox Code Playgroud)

这永远不会结束,我不确定它会给出正确的答案.所以我的第一个问题是,这是否是使用generic_filterscipy函数的正确方法.如果它恰好是正确的,那么它对我来说太慢了.所以我的下一个问题是,如果有更快的方法来实现这一目标?例如,考虑标准偏差,您可以简单地执行以下操作:

usual_mean = uniform_filter(mat, size=25, mode='reflect')
mean_of_squared = uniform_filter(np.multiply(mat,mat), size=25, mode='reflect')
standard_deviation = (mean_of_squared - np.multiply(usual_mean,usual_mean))**.5
Run Code Online (Sandbox Code Playgroud)

这是非常快速的,简单来自$\sigma ^ 2 = E [(X - \mu)^ 2] = E [X ^ 2] - (E [X])^ 2 $的事实.

python filtering numpy scipy sliding-window

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

R - 分别绘制3d中的两个二元法线及其轮廓

我一直在使用MASS包,可以使用image和par(new = TRUE)绘制两个双变量法线,例如:

# lets first simulate a bivariate normal sample
library(MASS)
bivn <- mvrnorm(1000, mu = c(0, 0), Sigma = matrix(c(1, .5, .5, 1), 2))
bivn2 <- mvrnorm(1000, mu = c(0, 0), Sigma = matrix(c(1.5, 1.5, 1.5, 1.5), 2))

# now we do a kernel density estimate
bivn.kde <- kde2d(bivn[,1], bivn[,2], n = 50)
bivn.kde2 <- kde2d(bivn2[,1], bivn[,2], n = 50)

# fancy perspective
persp(bivn.kde, phi = 45, theta = 30, shade = .1, border = NA)
par(new=TRUE)
persp(bivn.kde2, …
Run Code Online (Sandbox Code Playgroud)

plot r normal-distribution

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

Python - 矢量化滑动窗口

我正在尝试向量化滑动窗口操作.对于1-d案例,一个有用的例子可以遵循:

x= vstack((np.array([range(10)]),np.array([range(10)])))

x[1,:]=np.where((x[0,:]<5)&(x[0,:]>0),x[1,x[0,:]+1],x[1,:])
Run Code Online (Sandbox Code Playgroud)

index <5的每个当前值的n + 1值.但我得到这个错误:

x[1,:]=np.where((x[0,:]<2)&(x[0,:]>0),x[1,x[0,:]+1],x[1,:])
IndexError: index (10) out of range (0<=index<9) in dimension 1
Run Code Online (Sandbox Code Playgroud)

奇怪的是,我不会得到n-1值的这个错误,这意味着索引小于0.它似乎并不介意:

x[1,:]=np.where((x[0,:]<5)&(x[0,:]>0),x[1,x[0,:]-1],x[1,:])

print(x)

[[0 1 2 3 4 5 6 7 8 9]
 [0 0 1 2 3 5 6 7 8 9]]
Run Code Online (Sandbox Code Playgroud)

有没有办法解决?我的方法完全错了吗?任何意见将不胜感激.

编辑:

这就是我想要实现的目标,我将矩阵展平为一个numpy数组,我想要计算每个单元格的6x6邻域的平均值:

matriz = np.array([[1,2,3,4,5],
   [6,5,4,3,2],
   [1,1,2,2,3],
   [3,3,2,2,1],
   [3,2,1,3,2],
   [1,2,3,1,2]])

# matrix to vector
vector2 = ndarray.flatten(matriz)

ncols = int(shape(matriz)[1])
nrows = int(shape(matriz)[0])

vector = np.zeros(nrows*ncols,dtype='float64')


# Interior pixels
if ( (i % ncols) != 0 and …
Run Code Online (Sandbox Code Playgroud)

python numpy scipy

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

Matlab VS Python - eig(A,B)VS sc.linalg.eig(A,B)

我有以下矩阵sigma和sigmad:

西格玛:

    1.9958   0.7250
    0.7250   1.3167
Run Code Online (Sandbox Code Playgroud)

sigmad:

    4.8889   1.1944
    1.1944   4.2361
Run Code Online (Sandbox Code Playgroud)

如果我试图解决python中的广义特征值问题,我得到:

    d,V = sc.linalg.eig(matrix(sigmad),matrix(sigma))
Run Code Online (Sandbox Code Playgroud)

五:

    -1     -0.5614
    -0.4352    1
Run Code Online (Sandbox Code Playgroud)

如果我尝试在matlab中解决ge问题,我会得到:

    [V,d]=eig(sigmad,sigma)
Run Code Online (Sandbox Code Playgroud)

五:

    -0.5897    -0.5278
    -0.2564    0.9400
Run Code Online (Sandbox Code Playgroud)

但是d确实很重要.

python matlab numpy scipy eigenvalue

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

R2WinBUGS错误 - 陷阱 - 不兼容的副本

我试图从R调用winBUGS来估计逻辑回归.我正在使用以下代码:

# Directorio de trabajo
setwd("~/3 Diplomado/7 Bayesiana/8t1")

# paquete para hablarse con WinBUGS desde R
library(R2WinBUGS)

# cargamos datos
reg <- read.table("enf.csv", header = TRUE, sep = ",")
edad <- reg$edad
enfer <- reg$efer
n <- length(reg$edad)

# Primeras filas de los datos
head(reg)

# Nombres de los datos para alimentar al modelo en WinBUGS
datos <- list("edad","enfer", "n")

# Construimos el modelo

modelo <- function(){
  for (i in 1:n) {
    enfer[i] ~ dbin(theta[i], 1)
    logit(theta[i]) < - beta0 …
Run Code Online (Sandbox Code Playgroud)

r winbugs r2winbugs winbugs14

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