Python 从列表创建 2D numpy 数组
我在把列中的值转换成一个Numpy的二维数组时遇到了一些麻烦。我的代码输出的结果大致是这样的:
38617.0 0 0
40728.0 0 1
40538.0 0 2
40500.5 0 3
40214.0 0 4
40545.0 0 5
40352.5 0 6
40222.5 0 7
40008.0 0 8
40017.0 0 9
40126.0 0 10
40029.0 0 11
39681.5 0 12
39973.0 0 13
39903.0 0 14
39766.5 0 15
39784.0 0 16
39528.5 0 17
39513.5 0 18
而且这个输出大约有30万行。数据的坐标是按照(z,x,y)的顺序排列的,我想把它转换成一个765X510的二维数组(x,y),这样z坐标就能放在它们各自的(x,y)坐标上,这样我就可以把它写入一个图像文件。
有没有什么好主意?我到处找了找,但没有找到相关的信息。
编辑:
这是生成上述数据列的while循环(实际上是两个循环,一个函数在另一个while循环中被调用):
def make_median_image(x,y):
while y < 509:
y = y + 1 # Makes the first value (x,0), b/c Python is indexed at 0
median_first_row0 = sc.median([a11[y,x],a22[y,x],a33[y,x],a44[y,x],a55[y,x],a66[y,x],a77[y,x],a88[y,x],a99[y,x],a1010[y,x]])
print median_first_row0,x,y
list1 = [median_first_row0,x,y]
list = list1.append(
while x < 764:
x = x + 1
make_median_image(x,y)
3 个回答
0
假设你的数组叫做 l
import numpy as np
l = [[1,2,3], [4,5,6], [7,8,9], [0,0,0]]
>>> np.array(l)
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[0, 0, 0]])
这个应该可以用
>>> np.array([[i[1] for i in l],[i[2] for i in l]])
array([[2, 5, 8, 0],
[3, 6, 9, 0]])
0
能不能根据下面的数据创建一个数组,像这样呢?
数据:
38617.0 0 0
40728.0 0 1
40538.0 0 2
40500.5 0 3
40214.0 0 4
40545.0 0 5
40352.5 0 6
40222.5 0 7
40008.0 0 8
40017.0 0 9
40126.0 0 10
40029.0 0 11
39681.5 0 12
39973.0 0 13
39903.0 0 14
39766.5 0 15
39784.0 0 16
39528.5 0 17
39513.5 0 18
... (continues for ~100,000 lines, so you can guess why I'm adamant to find an answer)
我想要的结果:
numpy_ndarray = [[38617.0, 40728.0, 40538.0, 40500.5, 40214.0, 40545.0, 40352.5, ... (continues until the last column value in the data above is 764) ], [begin next line, when x = 1, ... (until last y-value is 764)], ... [ ... (some last pixel value)]]
简单来说,就是根据第一列的数据中的像素值,结合第二列和第三列的 (x,y) 坐标,构建一个矩阵或图像网格。
1
import numpy as np
l = [[1,2,3], [4,5,6], [7,8,9], [0,0,0]]
你可以直接把一个Python的二维列表放进一个numpy数组里。
>>> np.array(l)
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[0, 0, 0]])
如果你只想要后面的两列(也就是你的x和y值)
>>> np.array([[i[1],i[2]] for i in l])
array([[2, 3],
[5, 6],
[8, 9],
[0, 0]])