所以我有一个类型为i4的数组(10,3)。我希望将数据转换为3个不同的字符串数组,但我对数组的2d版本有问题。
import numpy
xyz = (100.0*numpy.random.random((10,3))).astype("i4")
A = xyz[:,0:3].view("S12") #works fine
B = xyz[:,0:2].view("S8") #fails
C = xyz[:,0:1].view("S4") #works fine
D = xyz[0,0:2].view("S8") #works fine using only 1 element instead of whole array
为什么我无法转换为一般形式:
xyz[:,0:dim].view("S%d"%(4*dim))
不管选择的暗淡?
答案 0 :(得分:1)
numpy.array(xyz[:,0:2].tostring())
作品。
使用:2
您正在查看2个数字(4个字节块),跳过1,查看下2个等等。这是视图,而不是副本,因为步幅和形状可以在不更改基础数据的情况下处理。
但是如果你试图在8字节块中查看相同的东西,strides就无法处理它。它需要查看1个块,跳过1/2块等等。
通过复制,这8个字节的块是连续的,可以看作一个单元。
{{1}}实际上是一个副本 - 将数据(只是{{1}}列)写入字节字符串,然后重新创建数组。
答案 1 :(得分:0)
所以我做了一些实验,看起来我找到了一贯有用的东西:
numpy.array(xyz[:,0:2].tostring()).view("10S8").reshape(10,1)
我没有超级使用它,因为它看起来很奇怪,但无论我猜想它都能正常工作。如果有人有更好的答案,请告诉我。