相关疑难解决方法(0)

将2D numpy数组转换为结构化数组

我正在尝试将二维数组转换为带有命名字段的结构化数组.我希望2D数组中的每一行都是结构化数组中的新记录.不幸的是,我所尝试的一切都没有按照我的预期进行.

我开始时:

>>> myarray = numpy.array([("Hello",2.5,3),("World",3.6,2)])
>>> print myarray
[['Hello' '2.5' '3']
 ['World' '3.6' '2']]
Run Code Online (Sandbox Code Playgroud)

我想转换为看起来像这样的东西:

>>> newarray = numpy.array([("Hello",2.5,3),("World",3.6,2)], dtype=[("Col1","S8"),("Col2","f8"),("Col3","i8")])
>>> print newarray
[('Hello', 2.5, 3L) ('World', 3.6000000000000001, 2L)]
Run Code Online (Sandbox Code Playgroud)

我尝试过的:

>>> newarray = myarray.astype([("Col1","S8"),("Col2","f8"),("Col3","i8")])
>>> print newarray
[[('Hello', 0.0, 0L) ('2.5', 0.0, 0L) ('3', 0.0, 0L)]
 [('World', 0.0, 0L) ('3.6', 0.0, 0L) ('2', 0.0, 0L)]]

>>> newarray = numpy.array(myarray, dtype=[("Col1","S8"),("Col2","f8"),("Col3","i8")])
>>> print newarray
[[('Hello', 0.0, 0L) ('2.5', 0.0, 0L) ('3', 0.0, 0L)]
 [('World', 0.0, 0L) ('3.6', 0.0, 0L) ('2', …
Run Code Online (Sandbox Code Playgroud)

python numpy

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

如何按列对多维数组进行排序?

有没有办法使用sort()方法或任何其他方法按列对列表进行排序?让我们说清单:

[
[John,2],
[Jim,9],
[Jason,1]
]
Run Code Online (Sandbox Code Playgroud)

我想对它进行排序,使它看起来像这样:

[
[Jason,1],
[John,2],
[Jim,9],
]
Run Code Online (Sandbox Code Playgroud)

这样做的最佳方法是什么?

编辑:

现在我遇到索引超出范围错误.我有一个二维数组,可以说1000行b 3列.我想根据第三列对其进行排序.这是正确的代码吗?

sorted_list = sorted(list_not_sorted, key=lambda x:x[2])
Run Code Online (Sandbox Code Playgroud)

python arrays sorting list

32
推荐指数
3
解决办法
9万
查看次数

转置数组并实际重新排序内存

我有一个3-D NumPy数组,例如

a = np.random.random((2,3,5))
Run Code Online (Sandbox Code Playgroud)

我想转置最后两个轴,即

b = a.transpose(0,2,1)
Run Code Online (Sandbox Code Playgroud)

但是,我不希望看到一个蹒跚的步伐!我想实际复制数组并在内存中重新排序.实现这一目标的最佳方法是什么?

memory transpose numpy

14
推荐指数
2
解决办法
3245
查看次数

Python中内存高效的大块numpy数组

我需要使用numpy对非常大的基因组数据集进行排序.我有一个26亿浮点数的数组,维度= (868940742, 3)一旦加载并且只是坐在那里,我的机器上占用了大约20GB的内存.我有一台2015年初的13英寸MacBook Pro,配备16GB内存,500GB固态高清和3.1 GHz intel i7处理器.只是加载数组溢出到虚拟内存,但没有到我的机器遭受的程度,或者我必须停止我正在做的其他事情.

我从22个较小的(N, 2)子阵列逐步构建了这个非常大的数组.

函数使用我调用的22个子数组中的每一个FUN_1生成2个新(N, 1)数组sub_arr.

第一个输出FUN_1是通过插入来自sub_arr[:,0]数组的值生成的b = array([X, F(X)]),第二个输出是通过sub_arr[:, 0]使用数组放入二进制数来生成的r = array([X, BIN(X)]).我分别称这些输出b_arrrate_arr.该函数返回一个3元组的(N, 1)数组:

import numpy as np

def FUN_1(sub_arr):
    """interpolate b values and rates based on position in sub_arr"""

    b = np.load(bfile)
    r = np.load(rfile)

    b_arr = np.interp(sub_arr[:,0], b[:,0], b[:,1])
    rate_arr = np.searchsorted(r[:,0], sub_arr[:,0])  # HUGE efficiency gain …
Run Code Online (Sandbox Code Playgroud)

python memory sorting performance numpy

14
推荐指数
2
解决办法
5841
查看次数

按列对NumPy float数组进行排序

按照这个技巧来获取NumPy数组的唯一条目,我现在有一个双列数组,基本上是第一个元素在[0.9:0.02:1.1]范围内的对,第二个元素在[1.5:0.1:2.0]范围内].我们称之为A.目前,它完全未分类,即

In [111]: A
Out[111]: 
array([[ 1.1 ,  1.9 ],
       [ 1.06,  1.9 ],
       [ 1.08,  1.9 ],
       [ 1.08,  1.6 ],
       [ 0.9 ,  1.8 ],
       ...
       [ 1.04,  1.6 ],
       [ 0.96,  2.  ],
       [ 0.94,  2.  ],
       [ 0.98,  1.9 ]])
Run Code Online (Sandbox Code Playgroud)

我想对它进行排序,以便每行首先在第二列中增加,然后在第一列中增加.即

array([[ 0.9 ,  1.5 ],
       [ 0.9 ,  1.6 ],
       [ 0.9 ,  1.7 ],
       [ 0.9 ,  1.9 ],
       [ 0.9 ,  1.9 ],
       [ 0.9 ,  2.  ],
       [ …
Run Code Online (Sandbox Code Playgroud)

python numpy

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

按升序对numpy矩阵行值进行排序

我有以下numpy矩阵,我想根据第3列值按升序排序.

[[  3.05706500e+06   4.98000000e+01  -2.62500070e+01  -9.38135544e+01]
 [  3.05706600e+06   4.98000000e+01  -3.00000056e+01  -9.38135544e+01]
 [  3.05706700e+06   4.98000000e+01  -3.37500042e+01  -9.38135544e+01]
 [  3.05706800e+06   4.98000000e+01  -3.75000028e+01  -9.38135544e+01]]
Run Code Online (Sandbox Code Playgroud)

这是我真正想要的矩阵.

[[  3.05706800e+06   4.98000000e+01  -3.75000028e+01  -9.38135544e+01]
 [  3.05706700e+06   4.98000000e+01  -3.37500042e+01  -9.38135544e+01]
 [  3.05706600e+06   4.98000000e+01  -3.00000056e+01  -9.38135544e+01]
 [  3.05706500e+06   4.98000000e+01  -2.62500070e+01  -9.38135544e+01]]
Run Code Online (Sandbox Code Playgroud)

我怎么用numpy做到这一点?任何帮助,将不胜感激.谢谢!

python arrays numpy matrix

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

多列上的Numpy排序ndarray

ndarray从一个文件中读取它,就像这样

my_data = np.genfromtxt(input_file, delimiter='\t', skip_header=0)
Run Code Online (Sandbox Code Playgroud)

示例输入(已解析)

[[   2.    1.    2.    0.]
 [   2.    2.  100.    0.]
 [   2.    3.  100.    0.]
 [   3.    1.    2.    0.]
 [   3.    2.    4.    0.]
 [   3.    3.    6.    0.]
 [   4.    1.    2.    0.]
 [   4.    2.    4.    0.]
 [   4.    3.    6.    0.]]
Run Code Online (Sandbox Code Playgroud)

更长的示例输入(未解析).

前两列应该是int,而最后两列应该是float,但这就是我得到的.欢迎提出建议.

主要问题是,我正在尝试使用Numpy对其进行排序,以便行排序优先于第二列的数字,然后是第一列.

期望输出的示例

[[   2.    1.    2.    0.]
 [   3.    1.    2.    0.]
 [   4.    1.    2.    0.]
 [ …
Run Code Online (Sandbox Code Playgroud)

python arrays sorting numpy

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

分段仿射变换+扭曲输出看起来很奇怪

我有一个图像,我试图使用skimage.PiecewiseAffineTransform和来扭曲skimage.warp。我有一组控制点 ( true) 映射到一组新的控制点 ( ideal),但扭曲没有返回我期望的结果。

在这个例子中,我有一个简单的波长梯度,我试图将其“拉直”成列。(您可能会问为什么我要查找轮廓和插值,但那是因为我实际上将此代码应用于更复杂的用例。我只是想重现这个简单示例的所有代码,这会导致相同的奇怪输出。)

为什么我的输出图像只是将输入图像扭曲成正方形和插图?我正在使用 Python 2.7.12 和 matplotlib 1.5.1。这是代码。

import matplotlib.pyplot as plt
import numpy as np
from skimage import measure, transform

true = np.array([range(i,i+10) for i in range(20)])
ideal = np.array([range(10)]*20)

# Find contours of ideal and true images and create list of control points for warp
true_control_pts = []
ideal_control_pts = []

for lam in ideal[0]:
    try:
        # Get the isowavelength contour in the true and ideal images …
Run Code Online (Sandbox Code Playgroud)

python numpy affinetransform python-2.7 scikit-image

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

如何按轴对 numpy 数组进行排序并保留行

例如,

In [11]: X  = np.array([[1,2,3,4],[1,2,6,3],[12,35,1,6]])
Run Code Online (Sandbox Code Playgroud)

这使

In [12]: X
Out[12]: 
array([[ 1,  2,  3,  4],
       [ 1,  2,  6,  3],
       [12, 35,  1,  6]])
Run Code Online (Sandbox Code Playgroud)

现在如果我使用

In [13]: X.sort(axis=0)

In [14]: X
Out[14]: 
array([[ 1,  2,  1,  3],
       [ 1,  2,  3,  4],
       [12, 35,  6,  6]])
Run Code Online (Sandbox Code Playgroud)

我失去了行结构。我想做的就是一次对一列进行排序并维护行结构。所以

按第三列排序

In [14]: X
Out[14]: 
array([[ 12,  35,  1,  6],
       [ 1,  2,  3,  4],
       [1, 2,  6,  3]])
Run Code Online (Sandbox Code Playgroud)

第三列按顺序排列,行保持不变。

我如何使用 numpy 实现这一目标?

python arrays sorting numpy

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

按多列对 numpy 二维数组进行排序

我有一个 2D numpy 数组,如下所示

array([[5, 0],
       [3, 1],
       [7, 0],
       [2, 1]])
Run Code Online (Sandbox Code Playgroud)

我想按每列(从右到左)进行(子)排序以获得以下结果:

array([[5, 0],
       [7, 0],
       [2, 1],
       [3, 1]])
Run Code Online (Sandbox Code Playgroud)

我怎样才能在 numpy 中做到这一点?

python arrays numpy numpy-ndarray

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