假设我的数组x
等于np.array(0 0 0 0 0 0 0 0 1000 0 0 0 0 1000 1000 1000)
我希望将其变成矩阵array([array([0 0 0 0 0 0 0 0]), array([1000]), array([0 0 0 0]), array([1000 1000 1000])])
。我该怎么做?
布尔条件是,如果它是一个0
的字符串,则将其分段,使其成为矩阵内的一个数组。如果它是一个1000
段的字符串,它的方式相同。
答案 0 :(得分:1)
在python中试试这个:
a = [0, 0, 0, 0, 0, 0, 0, 0, 1000, 0, 0, 0, 0, 1000, 1000, 1000]
out = []
flag = 0
tmp = []
for i in a:
if not flag and i==0:
tmp.append(i)
elif not flag and i==1000:
out.append(tmp)
tmp=[i]
flag=1
elif flag and i==1000:
tmp.append(i)
else:
out.append(tmp)
tmp=[i]
flag=0
out.append(tmp)
print out
答案 1 :(得分:1)
这是np.split
-
m = x!=0
out = np.split(x,np.flatnonzero(m[1:] != m[:-1])+1)
示例运行 -
In [53]: x = np.array([0, 0, 0, 0, 0, 0, 0, 0, 1000, 0, 0, 0, 0, 1000, 1000, 1000])
In [54]: m = x!=0
In [55]: np.split(x,np.flatnonzero(m[1:] != m[:-1])+1)
Out[55]:
[array([0, 0, 0, 0, 0, 0, 0, 0]),
array([1000]),
array([0, 0, 0, 0]),
array([1000, 1000, 1000])]
要将数组数组作为输出,请使用np.array()
-
In [56]: np.array(np.split(x,np.flatnonzero(m[1:] != m[:-1])+1))
Out[56]:
array([array([0, 0, 0, 0, 0, 0, 0, 0]), array([1000]), array([0, 0, 0, 0]),
array([1000, 1000, 1000])], dtype=object)
列表作为输出列表,这是单向的 -
m = x!=0
idx = np.r_[0, np.flatnonzero(m[1:] != m[:-1])+1, x.size]
out = [x.tolist()[idx[i]:idx[i+1]] for i in range(len(idx)-1)]
示例运行 -
In [94]: m = x!=0
In [95]: idx = np.r_[0, np.flatnonzero(m[1:] != m[:-1])+1, x.size]
In [96]: [x.tolist()[idx[i]:idx[i+1]] for i in range(len(idx)-1)]
Out[96]: [[0, 0, 0, 0, 0, 0, 0, 0], [1000], [0, 0, 0, 0], [1000, 1000, 1000]]