使用for循环初始化numpy字符串数组失败某些元素

时间:2015-08-05 15:49:53

标签: python arrays numpy

我正在尝试创建一个二进制字符串数组,每个字符串长度为16位。

我已经声明了一个空字符串数组,每个元素最多可包含20个字符:

bin_array = np.empty(len(dat_array), dtype="S20")

然后我使用这个循环分配每个元素:

for i in range(len(dat_array)):
binary = bin(dat_array[i])
if len(binary) < 18:
    number_of_zeros = 18 - len(binary)
    zeros = ""
    for i in range(number_of_zeros):
        zeros = zeros + "0"
    binary = "0b" + zeros + binary[2:]
bin_array[i] = binary
print bin_array[i]

在这个阶段,打印bin_array [i]完全正确地给了我每个元素,但是一旦我在循环之外并检查我的数组:

print bin_array

某些元素显然已更改为错误消息,并返回如下内容:

'0b1011000011010101' '0b1100000000110011' '0b1101000101101010' 
'0b1110000000101001' '0b1111000100011111' 'ject that raises an ' 
'ImportError if ctype' 's is not available.\n' '\n        Raises\n  
 ' '    ------\n        I' 'mportError\n         ' '   If ctypes is 

不是&#39; &#39;可用。\ n \ n&n; &#39; 0b1000000000110100&#39;     &#39; 0b1001000101110100&#39; &#39; 0b1010000000011111&#39;

如何通过for循环分配每个元素是完全正确的,但是在数组中,某些元素(只有一些!)会产生错误?

或者,如果我使用一个空的python列表,并使用for循环来.append每个元素,一切正常。但我仍然想知道为什么这会发生在numpy中。

编辑:当使用相同的for循环初始化len(dat_array)的预定义列表中的值时,某些元素也无法初始化,所以看起来这不是一个numpy数组问题......

2 个答案:

答案 0 :(得分:1)

问题是你在内部和外部for循环中使用了i作为索引。您可以将内部索引更改为k,或者简单地消除内部循环并使用zeros = number_of_zeros * "0"

答案 1 :(得分:0)

您正在为内部和外部循环使用相同的索引i,这会导致您对numpy数组的索引被破坏。您应该使用不同的索引变量:

    for j in range(number_of_zeros):
        zeros = zeros + "0"