我正在尝试将二维数组转换为带有命名字段的结构化数组.我希望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) 有没有办法使用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) 我有一个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)
但是,我不希望看到一个蹒跚的步伐!我想实际复制数组并在内存中重新排序.实现这一目标的最佳方法是什么?
我需要使用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_arr和rate_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) 按照这个技巧来获取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) 我有以下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做到这一点?任何帮助,将不胜感激.谢谢!
我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) 我有一个图像,我试图使用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) 例如,
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 实现这一目标?
我有一个 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 中做到这一点?
numpy ×9
python ×9
arrays ×5
sorting ×4
memory ×2
list ×1
matrix ×1
performance ×1
python-2.7 ×1
scikit-image ×1
transpose ×1