我想将存储在1D中的数据更改为2D: 我的意思是:
这
x|y|a
1|1|a(1,1)
2|1|a(2,1)
3|1|a(3,1)
1|2|a(1,2)
...
成:
x\y|1 |2 |3
1 |a(1,1)|a(1,2)|a(1,3
2 |a(2,1)|a(2,2)|a(2,3)...
3 |a(3,1)|a(3,2)|a(3,3)...
...
我是通过2个循环完成的:
(rows - array of x,y,a)
for n in range(len(rows)):
for k in range(x_len):
for l in range(y_len):
if ((a[2, n] == x[0, k]) and (a[3, n] == y[0, l])):
c[k, l] = a[0, n]
但它需要很长时间,所以我的问题是,如果有一个聪明和快速 Python中的解决方案。
所以要澄清我想做的事情:
我知道return()函数,关键是它在数组 a 中是随机的。
所以:
a = np.empty([4, len(rows)]
我从数据库中读取数据到数组 a ,其中 4列(1,2,x,y)和'len(行)'行
我对'1'列感兴趣 - 这个我要放到新的修改过的数组中。
x = np.zeros([1, x_len], float) y = np.zeros([1, y_len], float)
x 是来自数组 a 的已排序列(x)的向量,但不包含长度为 x_len <的duplicitas / strong>
(我通过sql查询阅读:select distinct ...)
y 是来自数组 a (没有duplicitas)的排序列(y)的向量,长度为 y_len < /强>
然后我正在制作阵列:
c = np.zeros([x_len, y_len], float)
并放入3个循环(对不起之前的错误)来自数组a的数据: &GT;
for n in range(len(rows)): for k in range(x_len): for l in range(y_len): if ((a[2, n] == x[0, k]) and (a[3, n] == y[0, l])): c[k, l] = a[0, n]
示例:
数组 a
array([[1, 3, 6, 5, 6], [1, 2, 5, 5, 6], [1, 4, 7, 1, 2], ## x [2, 5, 3, 3, 4]]) ## y
向量: x 和 y
[[1,2,4,7]] ## x with x_len=4 [[2,3,4,5]] ## y with y_len=4
数组 c
array([[1, 5, 0, 0], [0, 0, 0, 0], [0, 0, 0, 3], [0, 6, 0, 0]])
最后一个数组 c 看起来像这样(第一个a [0]被写入):
x\y 2|3|4|5 ----------- 1 1|5|0|0 2 0|0|0|0 4 0|0|0|3 7 0|6|0|0
我希望我没有弄错如何将它写入数组 c 。
非常感谢您的帮助。
答案 0 :(得分:6)
您可以使用numpy:
>>> import numpy as np
>>> a = np.arange(9)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8])
>>> a.reshape(3,3)
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
#or:
>>> a.reshape(3,3).transpose()
array([[0, 3, 6],
[1, 4, 7],
[2, 5, 8]])