我有一个函数响应不同,具体取决于我设置它作为输入的数组的方式。对于非工作方式,该函数仍然运行,但只是没有正确
工作方式:
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)
我希望它返回一个每次都不同的数组,仅由第1列组成,但如果第2项的起始位置是其中一个结束位置,则只会将项目放在彼此旁边1。这是一个例子:
如果选择的第一个项目是array3,则下一个项目只能是array1或array4,而不是其他项目。这是因为数组3的第4列是9,1意味着之后唯一可以出现的数组必须在第2列中包含9或1。
所以如果随机选择的第一项是array3,那么如果我运行这段代码:
make_sequence(2,real_array)
只能有以下输出可能性:
[ “something3”, “something4”]
[ “something3”, “something1”]
答案 0 :(得分: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数组,我的函数可以正常工作。
我仍然不知道为什么会这样,如果有人知道,请告诉我
答案 1 :(得分:0)
是的,你的阵列看起来和我一模一样。除了Rob的测试,您还可以看到
real_array1.shape == real_array2.shape
real_array1.dtype == real_array2.dtype
两者都返回True
但是,您的函数使用随机行,当然每次都会返回不同的结果。我不确定,如果没有仔细阅读,你的代码应该做什么,但你的问题可能是你的without_column
数组实际上是没有第一个行的数组。 / p>
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
&gt; 1使while循环永远运行。
答案 2 :(得分:-1)
两个阵列都不相同。非工作数组是一个多维数组,而不是标准数组。