我只是python的初学者,所以我问这个问题。我有一个像
这样的数据文件0.00 0.00 0.00 0.00 0.00 1.20
0.00 0.00 0.02 7.00 0.00 3.20
1.00 0.00 4.00 5.00 0.00 3.20
2.00 3.00 0.02 0.00 0.00 4.20
.........。
我需要将此数据转换为数组A [i,j,k]。 i是具有四个数字的一个块的索引。增加的是从左到右。在这种情况下,i = 0,1,2,3,4,5。 j是字符串的索引。在这种情况下,j = 0,1。 k索引是一个块中的列,k = 0,1。为了进一步说明,A [1,1,1] = 7.00。我怎么能用numpy或scipy来做呢?
答案 0 :(得分:0)
使用numpy.reshape
和swapaxes
:
import numpy as np
arr = np.array([[ 0. , 0. , 0. , 0. , 0. , 1.2 ],
[ 0. , 0. , 0.02, 7. , 0. , 3.2 ],
[ 1. , 0. , 4. , 5. , 0. , 3.2 ],
[ 2. , 3. , 0.02, 0. , 0. , 4.2 ]])
arr.reshape(-1,2,3,2).swapaxes(2,1).reshape(-1,2,2)
#array([[[ 0. , 0. ],
# [ 0. , 0. ]],
# [[ 0. , 0. ],
# [ 0.02, 7. ]],
# [[ 0. , 1.2 ],
# [ 0. , 3.2 ]],
# [[ 1. , 0. ],
# [ 2. , 3. ]],
# [[ 4. , 5. ],
# [ 0.02, 0. ]],
# [[ 0. , 3.2 ],
# [ 0. , 4.2 ]]])
更具程序性:
# target array shape
t_shape = (6, 2, 2)
assert arr.shape[1]%t_shape[2] == 0
arr.reshape(-1, t_shape[1], arr.shape[1]/t_shape[2], t_shape[2]).swapaxes(2,1).reshape(t_shape)
将字符串加载为数组:
from io import BytesIO # for python 2
# from io import StringIO for python 3
arr = np.genfromtxt(BytesIO("""0.00 0.00 0.00 0.00 0.00 1.20
0.00 0.00 0.02 7.00 0.00 3.20
1.00 0.00 4.00 5.00 0.00 3.20
2.00 3.00 0.02 0.00 0.00 4.20"""))