试图将内容附加到numpy数组

时间:2017-04-11 19:31:56

标签: arrays loops numpy tweepy textblob

我有一个脚本可以在Twitter上搜索某个术语,然后为返回的结果打印出许多属性。

我试图只返回一个空白数组。有什么想法吗?

public_tweets = api.search("Trump")

tweets_array = np.empty((0,3))

for tweet in public_tweets:

    userid = api.get_user(tweet.user.id)
    username = userid.screen_name
    location = tweet.user.location
    tweetText = tweet.text
    analysis = TextBlob(tweet.text)
    polarity = analysis.sentiment.polarity

    np.append(tweets_array, [[username, location, tweetText]], axis=0)

print(tweets_array)

我想要实现的行为就像......

array = []
array.append([item1, item2, item3])
array.append([item4,item5, item6])

array现在是[item1, item2, item3],[item4, item5, item6]

但是在Numpy:)

2 个答案:

答案 0 :(得分:0)

np.append不修改数组,您需要重新分配结果:

tweets_array = np.append(tweets_array, [[username, location, tweetText]], axis=0)

检查help(np.append)

  

请注意       append不会就地发生:分配了一个新数组       填充。

在第二个示例中,您正在调用列表的append方法,该方法就位;这与np.append不同。

答案 1 :(得分:0)

这是np.append

的源代码
In [178]: np.source(np.append)
In file: /usr/local/lib/python3.5/dist-packages/numpy/lib/function_base.py
def append(arr, values, axis=None):
    ....docs
    arr = asanyarray(arr)
    if axis is None:
        .... special case, ravels
    return concatenate((arr, values), axis=axis)

在您的情况下,arr是一个数组,从形状(0,3)开始。 values是一个3元素列表。这只是对concatenate的调用。所以append来电只是:

np.concateante([tweets_array, [[username, location, tweetText]]], axis=0)

concatenate适用于多个项目

alist = []
for ....:
   alist.append([[username, location, tweetText]])
arr = np.concatenate(alist, axis=0)

应该也一样;更好,因为列表追加更快。或者删除嵌套级别,让np.array将它们堆叠在新轴上,就像使用np.array([[1,2,3],[4,5,6],[7,8,9]])一样:

alist = []
for ....:
   alist.append([username, location, tweetText])
arr = np.array(alist)   # or np.stack()

np.append有多个问题。错误的名字。不会在现场采取行动。隐藏concatenate。没有太多警告扁平化。一次限制为2个输入。等