0

我有一个脚本可以在 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 中:)

4

2 回答 2

0

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

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

检查help(np.append)

请注意, append这不会发生在原地:分配和填充一个新数组。

在第二个示例中,您正在调用列表的append方法,该方法发生在原地;这与np.append.

于 2017-04-11T20:20:48.313 回答
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是一个数组,从 shape 开始(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 个输入。等等

于 2017-04-12T02:18:52.727 回答