我正在尝试创建一个二进制字符串数组,每个字符串长度为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数组问题......
答案 0 :(得分:1)
问题是你在内部和外部for循环中使用了i
作为索引。您可以将内部索引更改为k
,或者简单地消除内部循环并使用zeros = number_of_zeros * "0"
答案 1 :(得分:0)
您正在为内部和外部循环使用相同的索引i
,这会导致您对numpy数组的索引被破坏。您应该使用不同的索引变量:
for j in range(number_of_zeros):
zeros = zeros + "0"