小编ali*_*i_m的帖子

Numpy阵列广播规则

我在Numpy中理解阵列广播的规则时遇到了一些麻烦.

显然,如果你在两个相同尺寸和形状的数组上执行逐元素乘法,一切都很好.此外,如果您将多维数组乘以标量,它就可以工作.我明白了.

但是如果你有两个不同形状的N维阵列,我不清楚我究竟是什么广播规则.本文档/教程解释说:为了进行广播,操作中两个数组的尾随轴的大小必须相同,或者其中一个必须为1.

好的,所以我假设它是尾随轴,它们指的NM x N数组.那么,这意味着如果我尝试将两个二维数组(矩阵)乘以相同数量的列,它应该有效吗?除了它没有......

>>> from numpy import *
>>> A = array([[1,2],[3,4]])
>>> B = array([[2,3],[4,6],[6,9],[8,12]])
>>> print(A)
[[1 2]
 [3 4]]
>>> print(B)
[[ 2  3]
 [ 4  6]
 [ 6  9]
 [ 8 12]]
>>> 
>>> A * B
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: shape mismatch: objects cannot be broadcast to a single shape
Run Code Online (Sandbox Code Playgroud)

由于双方 …

python numpy numpy-broadcasting

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

如何在时间序列数据上执行K-means聚类?

如何进行K-means聚类时间序列数据?我理解当输入数据是一组点时它是如何工作的,但我不知道如何用1XM聚类时间序列,其中M是数据长度.特别是,我不确定如何更新时间序列数据的集群平均值.

我有一组标记时间序列的,我想用K-means算法来检查我是否会得到一个类似的标签或没有.我的X矩阵将是NXM,其中N是时间序列的数量,M是如上所述的数据长度.

有谁知道如何做到这一点?例如,我如何修改这个k-means MATLAB代码,以便它适用于时间序列数据?此外,我希望能够使用欧几里德距离以外的不同距离指标.

为了更好地说明我的疑虑,这里是我为时间序列数据修改的代码:


% Check if second input is centroids
if ~isscalar(k) 
    c=k;
    k=size(c,1);
else
    c=X(ceil(rand(k,1)*n),:); % assign centroid randomly at start
end

% allocating variables
g0=ones(n,1); 
gIdx=zeros(n,1);
D=zeros(n,k);

% Main loop converge if previous partition is the same as current
while any(g0~=gIdx)
%     disp(sum(g0~=gIdx))
    g0=gIdx;
    % Loop for each centroid
    for t=1:k
        %  d=zeros(n,1);
        % Loop for each dimension
        for s=1:n
            D(s,t) = sqrt(sum((X(s,:)-c(t,:)).^2)); 
        end
    end
    % Partition data to closest centroids
    [z,gIdx]=min(D,[],2);
    % Update …
Run Code Online (Sandbox Code Playgroud)

matlab cluster-analysis time-series data-mining k-means

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

Numpy`ValueError:操作数不能与形状一起播放......`

我正在使用python 2.7并尝试预测从1.00000000到3.0000000008的一些随机数据.我的阵列中有大约196个项目,我收到错误

ValueError: operands could not be broadcast together with shape (2) (50)
Run Code Online (Sandbox Code Playgroud)

我似乎无法独自解决这个问题.任何帮助或相关文档的链接将不胜感激.

这是我正在使用的代码生成此错误

nsample = 50
sig = 0.25
x1 = np.linspace(0,20, nsample)
X = np.c_[x1, np.sin(x1), (x1-5)**2, np.ones(nsample)]
beta = masterAverageList
y_true = ((X, beta))
y = y_true + sig * np.random.normal(size=nsample)
Run Code Online (Sandbox Code Playgroud)

python arrays numpy numpy-broadcasting

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

在x,y和z中以不同间隔快速插值定期采样的3D数据

我有一些体积成像数据,包括在x,y,z的规则网格上采样的值,但具有非立方体素形状(z中相邻点之间的空间大于x,y).我最终希望能够在通过卷的任意2D平面上插值,如下所示:

在此输入图像描述

我知道scipy.ndimage.map_coordinates,但在我的情况下使用它不那么简单,因为它隐含地假设输入数组中元素的间距在维度上是相等的.我可以首先根据最小的体素尺寸对我的输入数组进行重新采样(这样我的所有体素都可以是立方体),然后map_coordinates用来在我的平面上进行插值,但是插入我的数据两次似乎不是一个好主意.

我也知道,scipy有不规则隔开的ND数据(不同的内插LinearNDInterpolator, NearestNDInterpolator等等),但这些都是非常缓慢和内存密集型,我的目的.在我知道值在每个维度内规律间隔的情况下,插入数据的最佳方法是什么?

python interpolation numpy scipy volume-rendering

19
推荐指数
3
解决办法
6508
查看次数

Python:从matplotlib.pyplot.contour()中查找轮廓线

我试图为某些数据找到(但不是绘制!)轮廓线:

from pprint import pprint 
import matplotlib.pyplot 
z = [[0.350087, 0.0590954, 0.002165], [0.144522, 0.885409, 0.378515], 
     [0.027956, 0.777996, 0.602663], [0.138367, 0.182499, 0.460879], 
     [0.357434, 0.297271, 0.587715]] 
cn = matplotlib.pyplot.contour(z) 
Run Code Online (Sandbox Code Playgroud)

我知道cn包含我想要的轮廓线,但我似乎无法找到它们.我尝试了几件事:

print dir(cn) 
pprint(cn.collections[0]) 
print dir(cn.collections[0]) 
pprint(cn.collections[0].figure) 
print dir(cn.collections[0].figure) 
Run Code Online (Sandbox Code Playgroud)

无济于事.我知道cn是一个ContourSet,并且cn.collections是一个LineCollections 数组.我认为a LineCollection是一系列线段,但我无法弄清楚如何提取这些段.

我的最终目标是创建一个KML文件,在世界地图上绘制数据,以及该数据的轮廓.

但是,由于我的一些数据点很接近,而其他数据点很远,我需要构成轮廓的实际多边形(线串),而不仅仅是轮廓的光栅化图像.

我有点惊讶qhull不做这样的事情.

使用Mathematica ListContourPlot然后导出为SVG工作,但我想使用开源的东西.

我不能使用众所周知的CONREC算法,因为我的数据不在网格上(对于给定的x值,并不总是有多个y值,反之亦然).

该解决方案不需要python,但必须是Linux上的开源和可运行的.

python numpy spatial matplotlib contour

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

找出Numpy是否使用了哪个BLAS库

我在不同的环境中使用numpy和scipy(MacOS,Ubuntu,RedHat).通常我使用可用的包管理器安装numpy(例如,mac ports,apt,yum).

但是,如果您不手动编译Numpy,您如何确定它使用BLAS库?使用mac端口,ATLAS作为依赖项安装.但是,我不确定它是否真的被使用过.当我执行一个简单的基准测试时,该numpy.dot()函数需要大约.2倍于使用Eigen C++库计算的点积的时间.我不确定这是否是一个合理的结果..

最好的问候,Apo

c++ python macos numpy blas

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

Python 2.x中两个图像的直方图匹配?

我正在尝试匹配两个图像的直方图(在MATLAB中,这可以使用imhistmatch).是否有标准Python库提供的等效函数?我看过OpenCV,scipy和numpy,但没有看到任何类似的功能.

python numpy image-processing histogram

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

如何为聚类指定距离函数?

我想将给定自定距离的点聚类,奇怪的是,似乎scipy和sklearn聚类方法都不允许指定距离函数.

例如,sklearn.cluster.AgglomerativeClustering我唯一能做的就是输入一个亲和力矩阵(这将是一个非常大的内存).为了构建这个矩阵,建议使用sklearn.neighbors.kneighbors_graph,但我不明白如何在两点之间指定距离函数.有人可以开导我吗?

python hierarchical-clustering scipy scikit-learn

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

为什么log2和log1p比log和log10快得多?

在玩这个问题时,我注意到一些我无法解释的关于相对表现的事情np.log2,np.log并且np.log10:

In [1]: %%timeit x = np.random.rand(100000)
   ....: np.log2(x)
   ....: 
1000 loops, best of 3: 1.31 ms per loop

In [2]: %%timeit x = np.random.rand(100000)
np.log(x)
   ....: 
100 loops, best of 3: 3.64 ms per loop

In [3]: %%timeit x = np.random.rand(100000)
np.log10(x)
   ....: 
100 loops, best of 3: 3.93 ms per loop
Run Code Online (Sandbox Code Playgroud)

np.log2np.log和和快约3倍np.log10.或许甚至更直观地np.log1p(x)计算ln(x + 1),与以下内容相同np.log2:

In [4]: %%timeit x = …
Run Code Online (Sandbox Code Playgroud)

python performance numpy logarithm glibc

18
推荐指数
3
解决办法
3813
查看次数

如何在python numpy中创建随机正交矩阵

有没有一种方法可以调用在python中创建一个随机的标准正交矩阵?可能使用numpy?或者有没有办法使用多个numpy方法创建一个正交矩阵?谢谢.

python numpy linear-algebra orthogonal

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