我正在使用python-3.x,我想创建一个名为result_array的numpy数组,它保存每个循环的二进制结果(minimum_arrray)
# The code:
import random
import numpy as np
np.set_printoptions(threshold=np.nan)
i = 0
ii= 0
e = 2
y = 2
x = 2
bin_arrray_size = 5
# result_array = np.ndarray(shape=(), dtype=int)
# result_array = np.ndarray(shape=(), dtype=int)
for ii in range (e):
bin_arrray = np.random.randint (2, size=(bin_arrray_size, y*x))
print ("bin_arrray:" '\n', bin_arrray)
flot= np.zeros ((bin_arrray_size, 1))
for i in range (bin_arrray_size):
X = bin_arrray[i]
decimal=int(''.join(map(str,X[:].tolist())), 2)
flot[i] = (decimal * 2.324)
# print ("flot:" '\n', flot)
for flot in np.nditer(flot, flags=['external_loop','buffered'], order='F'):
print (" the flot :" '\n', flot)
minimum_arrray = bin_arrray[flot.argpartition(0)[:1]]
print ("Minimum_arrray:" '\n', minimum_arrray)
# result_array = np.vstack (result_array, minimum_arrray)
print ("bin_arrray type:" '\n',type(bin_arrray))
print("bin_arrray shape:" '\n', bin_arrray.shape)
print ("flot type:" '\n', type(flot))
print("flot shape:" '\n', flot.shape)
print ("minimum_arrray type:" '\n', type(minimum_arrray))
print("minimum_arrray shape:" '\n', minimum_arrray.shape)
########## the Result #######
bin_arrray:
[[1 0 0 0]
[0 0 0 1]
[0 1 0 0]
[0 1 0 1]
[1 0 1 1]]
the flot :
[ 18.592 2.324 9.296 11.62 25.564]
Minimum_arrray:
[[0 0 0 1]] ################ First result
bin_arrray:
[[0 1 0 0]
[0 1 0 1]
[0 0 0 1]
[1 0 0 1]
[1 0 0 0]]
the flot :
[ 9.296 11.62 2.324 20.916 18.592]
Minimum_arrray:
[[0 0 0 1]] ################ Second Result
bin_arrray type:
<class 'numpy.ndarray'>
bin_arrray shape:
(5, 4)
flot type:
<class 'numpy.ndarray'>
flot shape:
(5,)
minimum_arrray type:
<class 'numpy.ndarray'>
minimum_arrray shape:
(1, 4)
我试过这个循环:
result_array = np.random.random((2,4))
和这个
result_array = np.ndarray(shape=(), dtype=int)
循环之后
result_array = np.vstack (result_array, minimum_arrray)
但他们都没有工作
我希望看到一个名为(result_array)的新数组,如下所示:
result_array:
[[0 0 0 1]
[0 0 0 1]]
答案 0 :(得分:0)
您可以按如下方式堆叠numpy数组:
result = np.zeros((0, 5))
for i in range(3):
array = np.random.rand(1, 5)
result = np.vstack((result, array))
现在result
是:
array([[ 0.23537172, 0.71615064, 0.04694777, 0.76896748, 0.34270846],
[ 0.90591311, 0.90446305, 0.31865153, 0.79437811, 0.29033377],
[ 0.2967733 , 0.01044752, 0.43947452, 0.10285084, 0.29054507]])
陷阱是用多个参数调用vstack
而不是一个元组(如Eskapp所提到的)。
编辑:在效率方面(也可能是可读性),您最好构建一个大的3x5 result
数组,并在每次迭代中分配其行。但在简单的情况下,堆叠也可以起作用。
答案 1 :(得分:0)
您的代码效率低下且可以简化。
首先编写一个简单的函数,将任意精度的二进制数组转换为整数数组。这些可以通过简单的计算完成,比字符串转换和转换过程更快,更容易理解。 #这会将二进制数组解释为unsigned int,如果要将二进制数组转换为int,则必须进行一些修改。 def bin2int(bin_array): 小数= np.zeros(bin_array.shape [0],D型细胞= np.int) N = bin_array.shape [1]
for i in range(0,n):
decimal+=bin_array[:,n-i-1]*2**i
return decimal
现在到了主要部分。您可以使用vstack组合到数组,但在每次迭代中,将复制两个数组,这很慢。如果性能有任何问题,请不要在for循环中使用数组堆栈。只有Python列表才能有效扩展而不是numpy数组。
result_array=np.zeros((e,y*x),dtype=np.uint8)
for ii in range (e):
bin_array = np.random.randint (2, size=(bin_array_size, y*x))
decimal=bin2int(bin_array)
flot=decimal*2.324 #I don't know why you need this multiplication
result_array[ii,:]=bin_array[np.argmin(flot),:]
print(result_array)
使用二进制数据时的一些其他有用函数的示例(numpy.packbits,numpy.unpackbits)
如果您有任何其他问题,请随时询问。