以下代码生成一个0,1值的矩阵:
def func(num):
X = [random.randint(0, 2 ** 16) for _ in range(num)]
X = list(set(X))
X = [('{0:0' + str(16) + 'b}').format(x) for x in X]
X = np.asarray([list(map(int, list(x))) for x in X], dtype=np.int8)
return X
mlp = multiprocessing.Pool(multiprocessing.cpu_count()-1)
X = mlp.map(func, [num])
print X
mlp.close()
mlp.join()
矩阵X
具有以下输出:
[array([[1, 1, 0, ..., 1, 1, 1],
[0, 1, 1, ..., 1, 0, 0],
[0, 0, 0, ..., 1, 0, 0],
...,
[1, 0, 1, ..., 1, 1, 0],
[0, 0, 1, ..., 0, 0, 0],
[1, 0, 1, ..., 0, 0, 0]], dtype=int8)]
但我只是想:
[[1, 1, 0, ..., 1, 1, 1],
[0, 1, 1, ..., 1, 0, 0],
[0, 0, 0, ..., 1, 0, 0],
...,
[1, 0, 1, ..., 1, 1, 0],
[0, 0, 1, ..., 0, 0, 0],
[1, 0, 1, ..., 0, 0, 0]]
怎么做?
答案 0 :(得分:1)
你对func的定义会返回一个numpy数组,而不是一个原生的python列表。如果要从此函数获取本机Python列表,可以在numpy数组对象上使用tolist()方法。如果有任何理由为什么func()需要返回一个numpy数组而不是一个原生的Python列表?
import multiprocessing
import numpy as np
import random
def func(num):
X = [random.randint(0, 2 ** 16) for _ in range(num)]
X = list(set(X))
X = [('{0:0' + str(16) + 'b}').format(x) for x in X]
X = np.asarray([list(map(int, list(x))) for x in X], dtype=np.int8)
return X
mlp = multiprocessing.Pool(multiprocessing.cpu_count()-1)
X = mlp.map(func, [10])
mlp.close()
mlp.join()
data = X[0].tolist()
print(data)