0

我有一个函数响应不同,具体取决于我设置它作为输入的数组的方式。对于非工作方式,该功能仍然运行,但不正确

工作方式:

import numpy as np
array1 = ["something1", "a,b,c,9", "more", "b,c,4"]
array2 = ["something2", "4,3", "more", "1,a"]
array3 = ["something3", "z", "more", "9,1"]
array4 = ["something4", "1", "more", "z"]
real_array = np.array((array1,array2,array3,array4))

不工作方式:

import numpy as np
array = [["something1", "a,b,c,9", "more", "b,c,4"],["something2", "4,3", "more", "1,a"],["something3", "z", "more", "9,1"],["something4", "1", "more", "z"]]
real_array = np.array((array))

类似的不工作方式:

import numpy as np
import csv
array = []
reading = csv.reader(open('file.csv', 'rb'))
for row in reading:
    array.append(row)
real_array = np.array((array))

显然,不工作的方式会更容易处理数据,因为我可以将行追加到array,而其他方式必须手动完成。


两个数组都是相同的......那么为什么我的函数对它们的响应不同?


我的函数从文件中随机选择一行,然后检查第二列中的某些内容是否与前一个选择的最后一列中的某些内容相匹配。这里是:

def make_sequence(size,array):
        count = 0
        without_column = array[1::]
        np.random.shuffle(without_column)
        sequence = [without_column[0]]
        result = [without_column[0][0]]
        length = 0
        while length < size:
            np.random.shuffle(without_column)
            start = without_column[0][1].split(',')
            end = sequence[count][3].split(',')
            i = 0
            while i < len(start):
                if start[i] in end:
                    sequence.append(without_column[0])
                    result.append(without_column[0][0])
                    count += 1
                    i = len(start)
                else:
                    pass
                i += 1
            length = len(result)
        return result

编辑2:应该发生什么


如果我执行此代码:

make_sequence(10,real_array)

我希望它每次都返回一个不同的数组,并且仅由第一列组成,但如果第二个项目的起始位置是第一个的结束位置之一,则只会将项目彼此相邻放置。这是一个例子:

如果选择的第一项是array3,则下一项只能是array1或array4,其他都不能。这是因为数组 3 的第 4 列是 9,1,这意味着后面唯一的数组必须在其第 2 列中有 9 或 1。

所以如果随机选择的第一项是array3,那么如果我运行这段代码:

make_sequence(2,real_array)

只能有以下输出可能性:

["something3","something4"]

[“某事3”,“某事1”]

4

3 回答 3

1

我找到了解决方案!如果我根本不将文件运行到 numpy 数组中,该函数就可以完美运行......这是有效的:

import numpy as np
import csv
array = []
reading = csv.reader(open('file.csv', 'rb'))
for row in reading:
    array.append(row)
make_sequence(10,array)

如果我不将数组转换为 numpy 数组,我的函数将完美运行。

我仍然不知道这是为什么,如果有人知道,请告诉我

于 2013-04-23T18:29:24.297 回答
0

是的,你的数组看起来和我一模一样。除了 Rob 的测试,你还可以看到

real_array1.shape == real_array2.shape
real_array1.dtype == real_array2.dtype

两者都返回True

但是,您的函数使用随机行,当然每次都会返回不同的结果。如果不仔细阅读,我不确定您的代码应该做什么,但您的问题可能是您的without_column数组实际上是没有第一的数组。

In [15]: without_column = real_array1[1::]

In [16]: real_array1
Out[16]: 
array([['something1', 'a,b,c,9', 'more', 'b,c,4'],
       ['something2', '4,3', 'more', '1,a'],
       ['something3', 'z', 'more', '9,1'],
       ['something4', '1', 'more', 'z']], 
      dtype='|S10')

In [17]: without_column
Out[17]: 
array([['something2', '4,3', 'more', '1,a'],
       ['something3', 'z', 'more', '9,1'],
       ['something4', '1', 'more', 'z']], 
      dtype='|S10')

也许你想要的是:

In [19]: without_column = real_array1[:,1:]

In [20]: without_column
Out[20]: 
array([['a,b,c,9', 'more', 'b,c,4'],
       ['1', 'more', 'z'],
       ['z', 'more', '9,1'],
       ['4,3', 'more', '1,a']], 
      dtype='|S10')

这是故意的吗?


当我尝试运行您的代码时,选择size> 1 会使 while 循环永远运行。

于 2013-04-23T15:53:58.560 回答
-1

两个数组相同。非工作数组是多维数组,不是标准数组。

于 2013-04-23T15:07:55.560 回答