I don’t know what the problem with this program is (i’ve jst started learning python a few weeks ago). I wrote this program and it works fine for b=np.array([[1,2,2], [3,2,1], [3,1,5]]) but when i use different array b = np.array([[1,2,3], [3,2,1], [3,1,5]]) it gives error. Thank you everyone i fixed the first error.
But, now i am getting another error when i am using this file as function in my class i am getting below mentioned second error. When i am comparing dist[s,i] with 0.0 if (dist[s,i] == 0.0): it takes whole array. previously it was taking only particular dist[s,i] value.
I’ve tried this number of times and have gone through a number of explanations given for such type of error. I would be grateful if somebody can help on this.
This program calculates distance between points in ‘a’ and ‘b’ and the belongingness(memb) between points. I know there might be a silly mistake but i worked lot on this and still blank.
from numpy import *
import numpy as np
a=np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]])
b = np.array([[1,2,3], [3,2,1], [3,1,5]])
diff = a[newaxis,:,:] - b[:,newaxis,:]
dist=sqrt(np.sum((diff*diff),-1))
(n, d) = shape(a)
k = len(dist)
memb = np.zeros((k, n), dtype=float)
for i in range(n):
count = 0
for s in range(k):
if (dist[s,i] == 0.0):
count = count + 1
if (dist[s,i] != 0.0):
try:
nume = dist[s,i]
temp = 0.0
for j in range(k):
deno = dist[j,i]
temp += (nume / deno)**2
memb[s,i] = 1.0 / temp
except:
deno=0.0
else:
for s in range(k):
if (dist[s,i] == 0.0):
memb[s,i] = 1.0 / count
else:
memb[s,i] = 0.0
print memb
This is the error:
Traceback (most recent call last):
File "C:\python26\ask", line 186, in <module>
main()
File "C:\python26\ask", line 25, in main
memb = membMat(data, k, dist, m)
File "C:\python26\cmean new", line 121, in membMat
if (dist[s][i] == 0.0):
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Traceback (most recent call last):
File "C:/Users/ask/kk/pyth", line 25, in <module>
temp += ((nume / deno))
File "C:\python26\lib\warnings.py", line 29, in _show_warning
file.write(formatwarning(message, category, filename, lineno, line))
TypeError: idle_formatwarning_subproc() takes exactly 4 arguments (5 given)
The second matrix you posted is singular. I used this simple calculator tool to find the determinant is 0. This means that you can’t invert the matrix, and thus the program crashes.
I suggest you put a check into the system prior to doing the division, to make sure you aren’t going to crash in the future.