我在Numpy中理解阵列广播的规则时遇到了一些麻烦.
显然,如果你在两个相同尺寸和形状的数组上执行逐元素乘法,一切都很好.此外,如果您将多维数组乘以标量,它就可以工作.我明白了.
但是如果你有两个不同形状的N维阵列,我不清楚我究竟是什么广播规则.本文档/教程解释说:为了进行广播,操作中两个数组的尾随轴的大小必须相同,或者其中一个必须为1.
好的,所以我假设它是尾随轴,它们指的N是M 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)
由于双方 …
如何进行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) 我正在使用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) 我有一些体积成像数据,包括在x,y,z的规则网格上采样的值,但具有非立方体素形状(z中相邻点之间的空间大于x,y).我最终希望能够在通过卷的任意2D平面上插值,如下所示:

我知道scipy.ndimage.map_coordinates,但在我的情况下使用它不那么简单,因为它隐含地假设输入数组中元素的间距在维度上是相等的.我可以首先根据最小的体素尺寸对我的输入数组进行重新采样(这样我的所有体素都可以是立方体),然后map_coordinates用来在我的平面上进行插值,但是插入我的数据两次似乎不是一个好主意.
我也知道,scipy有不规则隔开的ND数据(不同的内插LinearNDInterpolator, NearestNDInterpolator等等),但这些都是非常缓慢和内存密集型,我的目的.在我知道值在每个维度内有规律间隔的情况下,插入数据的最佳方法是什么?
我试图为某些数据找到(但不是绘制!)轮廓线:
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上的开源和可运行的.
我在不同的环境中使用numpy和scipy(MacOS,Ubuntu,RedHat).通常我使用可用的包管理器安装numpy(例如,mac ports,apt,yum).
但是,如果您不手动编译Numpy,您如何确定它使用BLAS库?使用mac端口,ATLAS作为依赖项安装.但是,我不确定它是否真的被使用过.当我执行一个简单的基准测试时,该numpy.dot()函数需要大约.2倍于使用Eigen C++库计算的点积的时间.我不确定这是否是一个合理的结果..
最好的问候,Apo
我正在尝试匹配两个图像的直方图(在MATLAB中,这可以使用imhistmatch).是否有标准Python库提供的等效函数?我看过OpenCV,scipy和numpy,但没有看到任何类似的功能.
我想将给定自定距离的点聚类,奇怪的是,似乎scipy和sklearn聚类方法都不允许指定距离函数.
例如,sklearn.cluster.AgglomerativeClustering我唯一能做的就是输入一个亲和力矩阵(这将是一个非常大的内存).为了构建这个矩阵,建议使用sklearn.neighbors.kneighbors_graph,但我不明白如何在两点之间指定距离函数.有人可以开导我吗?
在玩这个问题时,我注意到一些我无法解释的关于相对表现的事情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.log2比np.log和和快约3倍np.log10.或许甚至更直观地np.log1p(x)计算ln(x + 1),与以下内容相同np.log2:
In [4]: %%timeit x = …Run Code Online (Sandbox Code Playgroud) 有没有一种方法可以调用在python中创建一个随机的标准正交矩阵?可能使用numpy?或者有没有办法使用多个numpy方法创建一个正交矩阵?谢谢.
python ×9
numpy ×8
scipy ×2
arrays ×1
blas ×1
c++ ×1
contour ×1
data-mining ×1
glibc ×1
histogram ×1
k-means ×1
logarithm ×1
macos ×1
matlab ×1
matplotlib ×1
orthogonal ×1
performance ×1
scikit-learn ×1
spatial ×1
time-series ×1