如何按嵌套的dtype对numpy数组进行排序?
我希望通过数组中的第一个元素对numpy数组进行排序
import numpy as np
from random import randint
# create dummy data
test = np.array([[[randint(1, 10) for _ in range(3)]] for _ in range(10)])
dtype = [('response', [('x', 'f'),('y', 'f'),('x', 'f
我正在寻找一种在Numpy中线性索引和多维索引之间进行快速转换的方法。
为了使我的用法更具体,我有一个由N个粒子组成的大型集合,每个粒子分配5个浮点值(维度)来表示一个Nx5数组。然后,我使用numpy.digitize对每个维度进行分类,并适当选择分类边界,以便在5维空间中为每个粒子分配一个分类。
N = 10
ndims = 5
p = numpy.random.normal(size=(N,ndims))
for idim in xrange(ndims):
bbnds[idim] = numpy.array([-float('inf')]+[-2.,-1.,0.
我需要尽可能快地根据第一个子数组中的值对多维数组进行排序(行被应用了数百万次)。
下面是我最初的路线,我试图提高它的性能,这是不起作用的。据我所见,我的numpy方法只是正确地对第一个子数组进行排序,而没有一个是剩余的。
我做错了什么,如何提高排序的性能?
import numpy as np
# Generate some random data.
# I receive the actual data as a list, hence the .tolist()
aa = np.random.rand(10, 2000).tolist()
# This is the original
我有一个形状为(40,926)的多维numpy数组。我还有一个数字数组形状(126),它具有表示有效列的随机索引。
现在,我想要做的是根据这个索引掩码过滤我的多维数组:所有不同于这个索引的列都必须被删除,结果形状(40,126)
所以,就像这样:
data = np.array([[]])
sel = np.asarray(idx.split(','))
print sel.shape #(126) array 404,410,500...1300
print X.shape #(40,926)
for x in wave: #(926) array 400,401,402
在多维ndarray的最后一个维上计算点积的最快方法是什么?
现在我正在做这件事:
import numpy as np
a=np.reshape(np.arange(90),[3,3,2,5])
b=np.reshape(np.arange(90),[3,3,2,5])
# for the sake of simplicity, a and b are the same for this example
ab=(a*b).sum(axis=-1)
我认为einsum在这里是有用的,但我很难将它应用到我的案例中。
谢谢!
我有一些多维数据,我想知道当速度是我所关心的(虽然不是最高的)之一时,我是否应该使用xarray。
我有一个4D数组,所以它的大小不足以阻止我使用numpy。坐标/指数对于一个维度是至关重要的,但对所有其他维度则不是如此。我将不得不做轻微的簿记,但作为主要的开发人员,这对我来说是可以的。对于那些在我之后继续迭代代码的开发人员来说,使用整数索引可能比使用基于标签的方法(xarray/大熊猫)更令人困惑。无论如何,如果我很好地记录了这个过程,我仍然可以使用numpy。但是我想使用xarray来提高可读性。
在实现了一个解决方案之后,我注意到下面的操作/索引将在我的机器上的大约5秒内完成。
for
我想使用numpy.ix_为二维值空间生成多维索引。但是,我需要使用一个子索引来查找一维索引。例如,
assert subindex.shape == (ny, nx)
data = np.random.random(size=(ny,nx))
# Generator returning the index tuples
def get_idx(ny,nx,subindex):
for y in range(ny):
for x in range(nx):
yi = y # This
但我没有索引值,只是在不同数组中的相同索引中有一个。例如,我有
a = array([3,4,5,6])
b = array([0,1,0,1])
是否有一些NumPy方法可以快速查看这两种方法,并从a中提取所有值,这些值的索引与b中所有1的索引相匹配?我希望这样做的结果是:
array([4,6])
可能值得一提的是,我的a数组是多维的,而我的b数组总是具有0或1的值。我尝试使用NumPy的logical_and函数,尽管这会返回具有不同维度的a和b的ValueError:
a = numpy.array([[3,2], [4,5], [6,1]])
b = numpy.array([0,
来自Matlab/Octave的背景,我一直在努力学习numpy。一件让我一次又一次地被绊倒的事情是向量和多维数组之间的区别。对于这个问题,我会给出一个具体的问题,但是如果有人也能解释一下numpy中一维数组背后的更一般的图片,为什么你首先想要它们,如何避免在混合单维数组和多维数组时遇到麻烦,等等,我会非常感激。总之,问题是:
我有一个叫做X的二维数组:
X = numpy.arange(10).reshape(2,5)
我想把X的最后一列存储成另一个二维数组(也就是一个列向量),叫做Y。我唯一能想到的方法是:
Y = numpy.atleast_2d(X[:,4]).T
但我不喜欢这样有几个
我正在使用多维NumPy数组a,它是2x2矩阵的“向量”。我想对a进行排序,以便使2x2矩阵按照它们的行规范排序。
import numpy as np
a = np.array([[[3, 4],
[1, 2]],
[[5, 6],
[7, 8]]])
sortidxs = np.argsort(np.linalg.norm(a, axis=-1))
a = np.array([a[_][sortidxs[_]] for _ in range(a.shape[0])])
# And the f
当处理维数(A,B,C)的三维矩阵"M“时,我们可以用两个向量X对相同维数D的[0,A)中的元素和[0,B)中的元素的Y进行索引。
更确切地说,我理解在写作的时候
M[X,Y,:]
我们要为D中的每一个“我”,
M[X[i], Y[i], :],
从而最终产生一个DxC矩阵。
现在假设
X is a numpy array of dim U, same concept as before
this time Y is a matrix UxL, where each row correspond to a Boolean numpy array
(a mask)
然后看下面的代码
f
我的问题和这个类似。 Get value at list/array index or "None" if out of range in Python 但我想使用多维numpy数组。 这可以在不事先检查索引的情况下完成吗? data = np.ones((2,3,4))
idx1 = [0,1]
idx2 = [1,2]
idx3 = [0, 100]
data[idx1, idx2, idx3] 所需输出: array([1., np.nan])