我需要从一个2D数组生成一个1D numpy数组,这样2列中的元素被连接和分离,数据类型是字符串。我可以用np.split
来实现相反的功能,但是np.concatenate
似乎没有我所需要的方式工作,也没有像pandas中那样的'join'
函数。在
这些是我的数组,它们的形状是(53187L,2L)和(27530L,2L):
dfSTcombined=np.vstack([txx_copy,dfSTA]).T
locatsCruSta=np.vstack([locatsID[:,3],locatsID[:,4]]).T
当我试图比较它们的成员资格时,问题随之而来:
dfSTinlocats=np.in1d(locatsCruSta, dfSTcombined)
dfSTinlocats.shape
->(55060L, 2L)
这样得到的长度是我预期的两倍(55060L=2*27530),因为它分别比较数组中的两列,但我需要同时比较两列。在
尝试其他方法:test4=np.where(dfSTcombined==locatsCruSta)
-> ValueError: shape mismatch: objects cannot be broadcast to a single shape
所以我需要创建一个新数组,其中1列包含两列的字符串,还有一个分隔符。在
[AR1006, 02]
(2列)[AR1024, 05]
应该变成:
['AR1006,02']
(1列,尽管我的符号不正确)
最终目标是使用类似于numpy.in1D
的方法在另一个组中找到一个组的成员,然后使用该成员资格的索引来选择更多的数据来匹配两个巨大的数据集。如果能在熊猫身上更容易些,我就不喜欢纽比了,但我不知道如何比较熊猫的会员资格。在
试试这个。在
添加一个轴,以便
^{pr2}$a
可以广播到b
上,并测试等价性沿最后一个轴使用
np.all
,然后沿结果的最后一个轴使用np.any
。在尝试用不同的方式-解释一下:
a
(形状为(5,1,2))添加一个轴,使f
和a
可广播。在f
的每个1x2数组将是 与a
的每个1x2数组进行比较。在a
。在结果是一个5x2x2x2布尔数组(5x1x2 op 2,2->5x2x2x2)。在
True
。在np.all
得到一个5x2布尔数组。在f
的每个1x2数组与a
的每个1x2数组的比较。在第一列用于
f[0] (array([2, 3]))
比较,第二列用于f[1]
比较。在{1x2>在np.any。在
要确定
a
的任何1x2数组是否等于f
的1x2数组, 沿第二个轴使用np.any
。在最后,}可以给出
np.zero
或{a
行的索引 其中f
的1x2元素位于第1行。在广播:
你提到熊猫是个选择。我当然会选择这个库,因为除此之外,它还有一些非常有用的函数来处理字符串(尽管我确信你想要的在NumPy中也是可能的)。在
将你的NumPy数组放入Pandas数据帧:
^{pr2}$可以很容易地将两列与分隔符一起连接到
pd.Series
对象中:如果您愿意,您甚至可以使用
np.array(series)
将该系列转换回NumPy数组。在检查序列对象的成员身份也很简单。实际上,您可以使用
np.in1d
:相关问题 更多 >
编程相关推荐